2016-02-22 14:02:32 biglazyturtle 阅读数 831
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3497 人正在学习 去看看 许英俊

做iOS苦于没有UI素材和JSON或XML数据资源等,我们可以尝试用Charles来进行其他App捉包进行获取想要的素材。(真心想做出自己理想的app不是抄袭而是借助来学习


安装好javaforosx 之后再安装Charles-proxy-3.11.2


复制charles.jar文件前往/Applications/Charles.app/Contents/Java进行覆盖过程

//手机端设置

手机和电脑最好是同一局域,也可以电脑开热点给手机链接。

打开手机WiFi设置手动代理。填写电脑的IP端口填写8888(可以在网络偏好设置查看)如图



//电脑端设置

第一次打开软件会提示是否更新下载最新版本的,一旦更新了软体只能用30日试用。所以还是拒绝下载

第一次手机连接上打开应用有个提示我们,点allow不拒绝

打开start就会监听手机app的数据请求

素材地址


返回的JSON数据


share download:

http://pan.baidu.com/s/1dDPeLDB


2018-11-08 14:29:42 Fly_hps 阅读数 281
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3497 人正在学习 去看看 许英俊

环境需求

1、Burpsuite(抓包工具)
2、IOS测试机
3、Android手机(提供Wifi热点)
4、一台电脑

数据包抓取

1、使用Android手机开启wifi热点,之后使用IOS、电脑进行连接该热点,让IOS测试机与电脑处于同一个局域网内

2、配置burpsuite代理

3、配置IOS网络代理

4、之后开启拦截进行测试

访问待测APP应用

成功捕获数据包!

在抓取到数据包之后,你就可以进行更加深入一步的测试了!go on !

 

2018-01-15 11:13:57 guoyanga1 阅读数 1439
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3497 人正在学习 去看看 许英俊

1.框架是laravel

ios版本:11.2最新版 

最近在项目中遇到一个问题,就是ios微信端商品列表数据是ajax请求返回的,不是页面渲染的,这个时候给了live事件安卓手机正常触发,ios不可以。因为是委托事件

解决方案:测试span标签不可以后,用了委托事件。

html:<a herf="javascript:;" class="btn">点我</a>
js文件:$(document).delegate('.btn','click',function(){
})
注意a标签一定要给
herf="javascript:;"


2013-11-10 15:44:21 caoyangbeijing 阅读数 737
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3497 人正在学习 去看看 许英俊
前言:
本文由DevDiv社区@jas 版主原创翻译,转载请注明出处!
原文:http://www.shinobicontrols.com/b ... 3-background-fetch/

介绍
IOS7介绍了一些新的多任务接口。我们已经看到NSURLSession提供的一个守护进程在后台下载数据。另一个新的后台特性:即使应用没有运行的情况下,也可以获取更新的内容。这样的话,你的应用就可以获取到更新内容并启动,而不用通过网络通知。根据应用的使用情况,IOS系统会智能的管理这些后台获取事件,并节约用电。例如,你可能会检测到某个用户每天早上醒来的时候会去查看他的社交网络,这样你就可以在他醒来之前安排一个后台获取事件。
代码:
https://github.com/ShinobiControls/iOS7-day-by-day

开启后台获取功能
如果要使用后台获取功能,你需要注册一下。在Xcode5新的功能选项卡中:
1.png

另一件事情,你需要定义多久开启一次后台获取事件。如果你的信息只是一个小时更新一次,你就可以设置为1个小时开启一次。如果不确定,你可以使用下面推荐的值:

1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2 {   
3     // Set the fetch interval so that it is actually called
4     [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
5  
6     return YES;
7 }


注意:minimumBackgroundFetchInterval的默认值是 UIApplicationBackgroundFetchIntervalNever。所以如果开启后台获取,要设置这个属性。

实现
当后台获取事件执行的时候,IOS系统会启动应用并调用代理application delegate methodapplication: performFetchWithCompletionHandler:。应有会有一定的时间去获取数据并执行之前提供的completion handler block。

本文附带的项目是关于交通状况的应用。应用会接收路上交通状况的通知并显示在UITableView上。这个demo中,更新消息是随机生成的,可以下来table来刷新,方法如下:
1 - (void)refreshStatus:(id)sender
2 {
3     [self createNewStatusUpdatesWithMin:0 max:3 completionBlock:^{
4         [refreshControl endRefreshing];
5     }];
6 }

调用的方法createNewStatusUpdatesWithMin:max:completionBlock::

01 - (NSUInteger)createNewStatusUpdatesWithMin:(NSUInteger)min max:(NSUInteger)max completionBlock:(SCTrafficStatusCreationComplete)completionHandler
02 {
03     NSUInteger numberToCreate = arc4random_uniform(max-min) + min;
04     NSMutableArray *indexPathsToUpdate = [NSMutableArray array];
05  
06     for(int i=0; i<numberToCreate; i++) {
07         [self.trafficStatusUpdates insertObject:[SCTrafficStatus randomStatus] atIndex:0];
08         [indexPathsToUpdate addObject:[NSIndexPath indexPathForRow:i inSection:0]];
09     }
10  
11     [self.tableView insertRowsAtIndexPaths:indexPathsToUpdate withRowAnimation:UITableViewRowAnimationFade];
12     if(completionHandler) {
13         completionHandler();
14     }
15  
16     return numberToCreate;
17 }


随机更新时创建了一个随机数(使用SCTrafficStatus的类方法randomstatus,顾名思义,生成一个随机对象)。然后存储数据,刷新列表并调用completion handler。这是标准的列表代码,你可以增加列表来体现通过网络更新的信息。

通过后台获取来更新,我们需要在viewcontroller中添加下面的方法:
01 - (NSUInteger)insertStatusObjectsForFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
02 {
03     NSUInteger numberCreated = [self createNewStatusUpdatesWithMin:0 max:3 completionBlock:NULL];
04     NSLog(@"Background fetch completed - %d new updates", numberCreated);
05     UIBackgroundFetchResult result = UIBackgroundFetchResultNoData;
06     if(numberCreated > 0) {
07         result = UIBackgroundFetchResultNewData;
08     }
09     completionHandler(result);
10     return numberCreated;
11 }


这个方法参数是app delegate后台获取方法中的completion handler,后面会看到。首先通过之前介绍的方法创建一些更新内容。当处理更新时,需要调用completion handler,告诉系统我们已经处理当前的内容了,可以接收新的信息了。方法返回值是之前创建的更新数值,并调用completion handler。completion handler是告诉系统我们已经处理当前信息了,如果合适的话,我们已经通过应用启动来显示更新了。
最后,app delegate需要实现这代理方法:
1 - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
2 {
3     // Get hold of the view controller
4     SCViewController *vc = (SCViewController *)self.window.rootViewController;
5     // Insert status updates and pass in the completion handler block
6     NSUInteger numberInserted = [vc insertStatusObjectsForFetchWithCompletionHandler:completionHandler];
7     [UIApplication sharedApplication].applicationIconBadgeNumber += numberInserted;
8 }

现在,当通过后台获取启动应用时,应用将会通过view controller来更新数据并简单的刷新界面。

测试
目前我们还没有测试该代码,也没有明确的方法去模拟后台获取事件。Xcode5有这个特性,但是我们扔需要考虑2个问题:
1.应用目前在正在后台运行
要保证应用已经成功启动,并正在后台运行(也就是说,没有被终止)。Xcode提供一个新的调试方法去模拟这个,所以测试是非常简单的:开启程序,按home键,然后点击新的调试项:
2.png 

当调试的时候,建议在获取更新的方法中加入一些日志,来观察后台获取流程。本程序会更新桌面图标消息数。
2.应用已经终止
应用之前运行的,现在被用户或者IOS系统终止了。模拟这种场景,最简单的方式是去添加一个新的scheme。点击manage schemes,双击对应的scheme,编辑这个新的scheme,勾选后台获取选项:
3.png
现在,当你运行这个scheme的时候,你会发现模拟器启动了,但是应用没有加载。如果你在后台获取代理里面加了日志,现在就可以看到日志输出了。具体看工程里面的例子。

总结
后台获取以小的代价,增强用户体验。如果你的应用需要通过网络实时更新,那么后台获取是个非常简单的方式,它能保证你应用启动的时候拥有最新的信息
2016-05-06 21:52:56 u010390827 阅读数 5792
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3497 人正在学习 去看看 许英俊

HTTP和HTTPS协议

  • URL全称是Uniform ResourceLocator(统一字典定位符)通过一个URL,能够找到互联网上唯一的11个资源
  • URL就是资源的地址,位置,互联网上的每个资源都有一个唯一URL
  • URL的基本格式 = 协议://主机地址/路径()如http://www.lanou3g.com/szzr/
  • 协议:不同的协议代表着不同国的资源查找方式,资源传输方式
  • 主机地址:存放资源的主机的IP地址(域名)
  • 路径:资源在主机中的位置
  • HTTP协议:Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网(www)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型,客户端向服务器发送一个请求报文,服务器以一个状态作为响应.
  • C/S模式:Client和Server常常分别处在相距很远的两台计算机上,Client程序任务是将用户的要求提交给Server程序,再将server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序.
  • HTTPS(Secure Hyper Text Transfer Protocol)安全超文本传输协议,它是一个安全通道.基于HTTP开发,用于在客户计算机和服务器之间的交换信息,它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版.HTTPS协议使用SSL在发送和接受方通过交换共和的密匙来实现,因此,所传送的数据不容易被网络黑客截获和解密.
  • SSL是Netscape公司所提出安全保密协议,运行在TCP/IP层之上,应用层之下,为应用层提供加密数据通道
  • HTTP和HTTPS的异同:

    • https协议需要到cd申请证书,一般免费证书很少,需要交费.
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
    • http和https使用的是完全不同的链接方式,用的端口也不一样,前者是80,后者是443
    • http的链接很简单,是无状态的
    • https是协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,要比http安全.

HTTP协议的常见的请求方式:GET和POST

  • 相同点:都能给服务器传输数据.
  • 不同点:

    • 给服务器传输数据的方式不同:

      • GET:通过网址字符串.
      • POST:通过data.
    • 传输数据的大小:

      • GET:网址字符串最多255.
      • 使用NSData,容量超过1G.
    • 安全性:

      • GET:所有传输给服务的数据,显示的网址里,类似于密码的明文输入,直接可见.
      • POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取.

HTTP协议请求如何实现

同步请求

GetSynchronization get同步请求

- (void)getAndSynchronization {
    //1 创建网址对象
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSURL *url = [NSURL URLWithString:urlString];
    //2 创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //3 发送请求,连接服务器(这个方法虽然能过时了但是能使用)
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //4 解析
    if (data) {
        self.getDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//        NSLog(@"%@",self.getDic);
        if(self.getDic){
            //判断对象是否支持json格式
            if ([NSJSONSerialization isValidJSONObject:self.getDic]) {
                //将字典转换为json串
                NSData *strData = [NSJSONSerialization dataWithJSONObject:self.getDic options:NSJSONWritingPrettyPrinted error:nil];
                if (strData) {
                    //将data转换为字符串
                    NSString *str = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
                    NSLog(@"%@",str);
                }
            }
        }
    } else {
        NSLog(@"请求失败");
    }
}

post同步请求

- (void)postAndSynchronization {
    //第一步:创建URL
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
    //第二步:创建请求
    NSString *postStr = @"date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *postData = [postStr dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    //设置请求方式为POST,默认为GET
    request.HTTPMethod = @"POST";
    //设置body
    request.HTTPBody = postData;
    //第三方:连接服务器
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    dic = [NSJSONSerialization JSONObjectWithData:received options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@",dic);
}

异步请求

异步block请求

- (void)getAndAsychronousBlock {
    //网址
    NSURL *url = [NSURL URLWithString:@"http://mapi.weibo.com/2/remind/unread_count?remind_version=199&networktype=wifi&with_comment_attitude=1&ext_all=0&moduleID=700&c=android&i=ed0d41d&s=f32076c0&ua=Xiaomi-MI%203__weibo__6.4.0__android__android4.4.4&wm=20005_0002&aid=01AtCI_i9CnkwZ8amfinkM-ZJWFOpF0gsEw_rwX43XUPpDgT8.&idc=&v_f=2&from=1064095010&gsid=_2A256CymIDeTxGeNG6FQQ9i_NwjqIHXVWgTpArDV6PUJbrdAKLXjFkWoNYAQ8b7QA8jEG-5JLCblfTetI5w..&lang=zh_CN&skin=default&oldwm=9975_0028&sflag=1&with_settings=1&unread_message=1&with_page_group=1"];
    //请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //异步连接block方式
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

        NSLog(@"%@",dic);

        NSLog(@"请求到数据了");
    }];
    NSLog(@"我在block的地下");
}

post 异步协议代理方式

- (void)postAndDelegate {
    //网址
    /*
     date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213
     */
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
    //post请求对象构建
    NSMutableURLRequest *mutableURLRequest = [NSMutableURLRequest requestWithURL:url];
    //设置请求方式
    [mutableURLRequest setHTTPMethod:@"POST"];
    //设置参数
    //需要将参数转换为data类型
    NSString *str = @"date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [mutableURLRequest setHTTPBody:data];
    //请求超时
    [mutableURLRequest setTimeoutInterval:60];
    //需要设置代理,所以我们需要一个连接对象
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:mutableURLRequest delegate:self];
}
#pragma mark - NSURLConnectionDelegate,NSURLConnectionDataDelegate协议方法
//服务器开始响应,准备返回数据
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    //初始化receiveData,用来接收数据
    self.receiveData = [[NSMutableData alloc] init];
    NSLog(@"开始返回响应");
}
//客户端接收数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    //返回的数据不是一次返回而是分批返回,所以我们需要一个可变的data类型来接收它
    NSLog(@"开始接收数据");
    [self.receiveData appendData:data];
}
//数据请求完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"数据已经返回完毕");
    NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.receiveData options:NSJSONReadingAllowFragments error:nil];
    if (dict) {
        if ([NSJSONSerialization isValidJSONObject:dict]) {
            NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",str);
        }
    }
}

//网络请求失败
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"请求出错----%@",error);
}

iOS7之后请求变化

NSURLSession get请求(block)

- (void)sessionAndGet {
    //网址
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
    //建立加载数据任务
    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@",dic);
        }];
    //启动任务
    [dataTask resume];
}

NSURLSession post请求block

- (void)sessionAndPost {
    //网址
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
    //设置NSMutableURLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //设置请求方式
    request.HTTPMethod = @"POST";
    //设置参数
    request.HTTPBody = [@"date=20151031&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213 " dataUsingEncoding:NSUTF8StringEncoding];
    //创建一个session对象,用来进行post请求
    NSURLSession *session = [NSURLSession sharedSession];
    //建立任务
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //解析
        NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
        mDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@",mDict);
    }];
    //启动任务
    [task resume];
}
#pragma mark - NSURLSessionDataDelegate,,NSURLSessionDelegate协议方法
//NSURLSessionDataDelegate代理方法
//NSURLSession提供了block方式处理返回数据的简单方式,但如果想要在接收数据过程中做进一步的处理,仍然可以调用相关的协议方法,NSURLSession的代理方法和NSURLConnection有些类似,都是分为接收响应,接收数据,请求完成几个阶段
//使用代理方法我们需要设置代理,但是session的delegate属性是只读的,要想设置代理只能通过这种方式创建session
- (void)sessionAndDelegate {
    //网址
    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
    //创建一个session对象,用来进行请求
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    //创建任务(因为要使用代理方法,就不需要block方式初始化)
//    NSURLSessionDataTask *task = [session dataTaskWithURL:url];//这个方法只能用在get请求中
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url]];
    //启动任务
    [task resume];
}

//代理方法
//接收服务器响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    //允许处理服务器的响应,才会继续接收服务器返回的数据
    completionHandler(NSURLSessionResponseAllow);
    //当网络请求基于http协议时(url以http开头),response本质为NSHTTPURLResponse类型
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    //创建空的可变的data,准备接收服务器传回的data片段
    self.recervedData = [NSMutableData dataWithCapacity:40];
}
//接收服务器数据(可能多次,手动拼接数据)
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    //处理每次收到的数据
    //将每次接收到的data片段,拼接到receivedData中
    [self.recervedData appendData:data];
}
//请求结果(失败后error对象被赋值错误信息)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    //请求完成,成功或者失败的处理
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    dic = [NSJSONSerialization JSONObjectWithData:self.recervedData options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@",dic);
}

下载

- (void)downLoadTask {
    //创建网址
    NSURL *url = [NSURL URLWithString:@"http://mapi.weibo.com/2/remind/unread_count?remind_version=199&networktype=wifi&with_comment_attitude=1&ext_all=0&moduleID=700&c=android&i=ed0d41d&s=f32076c0&ua=Xiaomi-MI%203__weibo__6.4.0__android__android4.4.4&wm=20005_0002&aid=01AtCI_i9CnkwZ8amfinkM-ZJWFOpF0gsEw_rwX43XUPpDgT8.&idc=&v_f=2&from=1064095010&gsid=_2A256CymIDeTxGeNG6FQQ9i_NwjqIHXVWgTpArDV6PUJbrdAKLXjFkWoNYAQ8b7QA8jEG-5JLCblfTetI5w..&lang=zh_CN&skin=default&oldwm=9975_0028&sflag=1&with_settings=1&unread_message=1&with_page_group=1"];
    //创建session对象
    NSURLSession *session = [NSURLSession sharedSession];
    //创建下载的任务模式(会话模式)
    NSURLSessionDownloadTask *downLoadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"error:%@",error.description);
        } else {
            //下载好的文件存储的路径是在一个临时文件中/Users/xalo/Desktop/
            //创建一个需要保存下载文件的路径
            NSURL *targetURL = [NSURL fileURLWithPath:@"/Users/xalo/Desktop/herJSON.json"];
            //将临时路径下的文件拷贝到桌面文件
            NSFileManager *manager = [NSFileManager defaultManager];
            //copy
            [manager copyItemAtURL:location toURL:targetURL error:nil];
            //move
//            [manager moveItemAtURL:location toURL:targetURL error:nil];
            NSLog(@"location:%@",location);

        }
    }];
    //启动任务
    [downLoadTask resume];
}

iOS开发 蓝牙连接

阅读数 719

没有更多推荐了,返回首页