今天要用AFNetworking這個框架,發現終端像是抽風似的,不管是install還是update都沒有反應,初始以為是網速的問題,后來發現網絡監控中有網速,就很納悶,等了幾分鐘,直接給我報了個錯誤:
本來樓主想把錯誤信息截圖上來的,但是后來發現我介君這個問題后本地已經有了這個庫,所以就測試不出來問題了.無奈我就把解決的方法拿出來分享一下:
順便介紹一下如何在自己的項目中集成第三方框架:
git.gif
樓主的之所以能夠下載成功,是因為之前下載過了!
如果大家在安裝(pod install/update)沒反應,就把pod install替換成:
pod install --verbose --no-repo-update
之后就可以下載成功了,CocoaPods有太多的問題,如果有朋友出現類似的問題可以試試,說不定管用.
關于AFNetworking的使用
1、使用AFNetworking來上傳文件
//創建 此處并不是單例
AFHTTPSessionManager*manager = [AFHTTPSessionManager manager];
[manager POST:@"http://127.0.0.1/php/upload/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//在這里上傳文件
#從本地讀取圖片
NSURL*url = [[NSBundle mainBundle] URLForResource:@"1.jpg" withExtension:nil];
[formData appendPartWithFileURL:url name:@"userfile" error:NULL];
} progress:^(NSProgress * _Nonnull uploadProgress) {
#進程block的回調
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
#成功后block的回調
NSLog(@"%@",responseObject);
NSLog(@"上傳成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
#失敗后block的回調
NSLog(@"上傳失敗");
}];
測試:
git.gif
2、使用AFNetworking來獲取數據(json)
此處是那本地服務器中的數據來測試的(需要搭建本地服務器)
//創建 此處并不是單例
AFHTTPSessionManager*manager = [AFHTTPSessionManager manager];
[manager GET:@"http://127.0.0.1/demo.json" parameters:nil
progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"獲取成功");
//AFN為我們已經做了json的反序列化的處理
NSLog(@"%@",[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"獲取失敗");
}];
測試:

3、使用AFNetworking來獲取HTML
AFHTTPSessionManager*manager = [AFHTTPSessionManager manager];
#必須要寫這句話才能獲取
#//由于訪問的數據是HTML 不是JSON 所以需要手動的指定響應序列化器 默認是json的響應序列化器
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://www.baidu.com/" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// NSString*sting = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
//
NSLog(@"%@",[responseObject class]); //NSXMLParser
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
測試:
gif.gif
4、使用AFNetworking來下載
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.downlaodTask
/*
1.請求
2.進度
3.destination 把文件下載到哪里去
4.completionHandler 完成后的回調
*/
#要下載的文件,樓主是從百度獲取的圖片地址
NSURL*url = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/d000baa1cd11728b99625f26cafcc3cec3fd2c63.jpg"];
NSURLRequest*request = [NSURLRequest requestWithURL:url];
NSURLSessionDownloadTask*downTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"%f",downloadProgress.fractionCompleted);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//返回文件保存到哪里 url
#保存到cache目錄
// NSString*cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
#保存到桌面
NSString*desktop = @"/Users/yms/Desktop";
//文件名
NSString*fileName = response.suggestedFilename;
NSString*savePath = [desktop stringByAppendingPathComponent:fileName];
//由于生成的string沒有協議 所以不是一個完整的url 不能使用 URLWithString
NSURL*localURL = [[NSURL alloc]initFileURLWithPath:savePath];
return localURL;
return nil;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSLog(@"%@",filePath);
}];
[downTask resume];
測試:
gif.gif
5、使用AFNetworking來獲取HTTPS的數據(拿12306做的測試)
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//https的默認設置
AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy];
//12306自己建的證書
policy.allowInvalidCertificates = YES;
#//校驗域名 不去校驗域名
policy.validatesDomainName = NO;
[manager setSecurityPolicy:policy];
//html
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"https://kyfw.12306.cn/otn/" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
測試:
gif.gif
6、使用AFNetworking來檢測網絡狀態變化
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
//當網絡狀態發生改變的時候,會通過block回調告訴我
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// AFNetworkReachabilityStatusUnknown = -1, 未知
// AFNetworkReachabilityStatusNotReachable = 0,無網絡
// AFNetworkReachabilityStatusReachableViaWWAN = 1,蜂窩數據
// AFNetworkReachabilityStatusReachableViaWiFi = 2,wifi
switch (status) {
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi");
break;
case AFNetworkReachabilityStatusUnknown:
NSLog(@"Unknown");
break;
default:
break;
}
}];
//開啟監控
[manager startMonitoring];
這個樓主就不測試了,大家有興趣可以去試一下~
樓主對這個框架的使用還不是很熟練,有很多地方并不是很懂,希望有大神帶帶我