第三方
Posted J_维他命_M
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三方相关的知识,希望对你有一定的参考价值。
一、CocoaPods
CocoaPods简介
CocoaPods是一个用来帮助我们管理第三方依赖库的工具
在开发ios应用时,会经常使用第三方类库,比如SDWeblmage、AFNetworking等等,手动的下载与添加类库非常麻烦,通过CocoaPods可以便捷的下载与管理第三方类库。
使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。
官方链接:https://cocoapods.org
CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境,OS X系统默认支持Ruby运行,但是Ruby的默认源使用的是rubygems.org,过内访问这个网站时,如果无法FQ,则不能下载,解决方案是将其替换成可用的Ruby,比如淘宝,替换如下:
打开终端,输入gem sources —remove https://rubygems.org/
再输入gem source - a http://ruby.淘宝.org/
为了验证你的Ruby镜像是并且是taobao,可用输入gem sources-|查看
CocoaPods安装
终端中输入 sudo gem install cocoa pods (中间可能要输入管理员密码,不是明文,在你输入密码的时候不会提示)
安装过程需要稍作等待,成功后会有成功安装的提示
在终端中使用cd命令进入工程所在目录。然后在当前目录下使用 vim Podfile命令创建Podfile文件(配文件)。
键盘输入i进入编辑模式,在podfile文件中输入一下文字
platform :ios, \'8.0\'
target "UISenior18_CocoaPodszuoye" do
pod \'AFNetworking\', \'~> 3.1.0\'
end
在变价完成后,按下esc键,再按下“:”,此时,输入“wq”再按回车,保存退出。
利用CocoaPods下载类库,在终端的当前项目目录下输入pod install 等得一会。
然后回到你的工程所在的目录,会发现现在多了很多文件,此时我们应该使用,xcworkspace文件打开项目,而不再用xcodeproj文件打开。
如果一个项目中已经包含了Cocoapods的配置文件,但是编译却出现错误,那么我们仅需要一行命令就可以配置好所有的第三方类库
$pod update (更新)
二、AFNetworking
AFNetworking简介
AFNetworking是一个在iOS开发中 使用非常多网络开源库
适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档)
NSURLConnection , NSOperation,以及其他熟悉的Foundation技术之上
它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松
AFNetworking简介
AFNeting是一个轻量级的网络请求API类库。是以NSURLConnection,NSOperation和其他方法为基础的核心代码:AFHTTPRequestOperationManager
AFNetworking 拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松
AFNetworking是一个轻量级的网络请求API类库。是以NSURLCommection,NSOperation和其他方法为基础的核心代码:AFHTTPRequestOperationManager
AFnetworking拥有良好的架构,丰富的api,以及模块化架构方式,使得使用起来非常轻松
AFNetworking3.0目前使用NSURLSession作为网络类
AFNetworking简介
AFNetworking是一个轻量级的网络请求API类库。是以NSURLConection,NSOperation和其他方法为基础的核心代码:AFHTTPRequestOperationManager
AFNetworking拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松
功能梳理一:
AFRLConnectionOperation:继承自NSOperation实现了NSURL Connection的代理方法。//弃用了
AFHTTPRequestOperatio:继承自AFURLConnection的子类,当request请求使用的协议为HTTP和HTTPS时使用,它封装了用于决定request是否成功的状态码和内容类型
AFJSONRequestOperation:继承自AFHTTPRequestOperation,用于下载和处理jsonresponse数据。
AFPropertyListRequestOperation:继承自AFHTTPRequestOperation,用于下载和处理propretyListresponse数据
功能梳理二:
AFHTTPlient:是一个封装了基于http协议的网络应用程序的公共流模式。包含
1.发起基于根路径的使用基本的url相关路径来只做request
2.为request自动添加设置http headers。
3.使用http 基础证书或者OAuth来验证request
4.为由client制作的requests管理一个NSOperationQueue
5.从NSDictionary生成一个查询字符串或http bodies。
6.从request中构建多部件
7.自动的解析http response数据为相应的表现数据
8.在网络可达性测试用监控和响应变化。
网络监测
AFNetworking可以进行网络监测
//开始监测
[AFNetworkReachabilityManager sharedManager]startMonitoring];
//打印数据
[AFNetworkReachablityManager sharedManager]setReachablityStatuesChangeBlock:^(AFNetworkReachablity status status) {
NSL(@“%ld”,status)’
}];
//几种不同的网络状态
typedef NS_ENUM(NSInteger,AFNetworkReachabilityStatus){
AFNetworkReachabilityStatusUnknown = -1;
AFNetworkReachabilityStatusNotReachable = 0;
AFNetworkReachabilityStatusReachableViaWWAN = 1;
AFNetworkReachabilityStatusReachableViaWiFi = 2;
};
#import "ViewController.h" #import <AFNetworking.h> @interface ViewController () { //进行网络监测判断的BOOl值 BOOL isOpen; } //用于网络请求的session对象 @property (nonatomic,strong)AFHTTPSessionManager *session; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //初始化session对象 self.session = [AFHTTPSessionManager manager]; //设置请求接口回来的时候支持什么类型的数据 self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)netWorkAction:(id)sender { if (!isOpen) { //打开网络监测 [[AFNetworkReachabilityManager sharedManager]startMonitoring]; isOpen = YES; }else{ //关闭网络监测 [[AFNetworkReachabilityManager sharedManager]stopMonitoring]; isOpen = NO; } //接下来会判断当前是wifi状态还是3g状态,网络不可用状态 [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"当前网络处于未知状态"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"当前网络处于未连接状态"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"当前网络处于无线广域网"); break; case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"当前网络处于wifi状态"); break; default: break; } }]; } - (IBAction)getRequestAction:(id)sender { //get请求请求的网址 [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { NSLog(@"它是一个下载的进度"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败:"); }]; } - (IBAction)postRequestAction:(id)sender { /*{ do = "pri_memberlist"; "member_id" = zpHr2dsRvQQxYJxo2; "workspace_id" = ILfYpE4Dhs2gWcuQx; }*/ NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php"; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:@"pri_memberlist" forKey:@"do"]; [dict setObject:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"]; [dict setObject:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"]; [self.session POST:urlStr parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) { // NSLog(@"上传进度"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"post请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"post请求失败"); }]; } - (IBAction)post1RequestAction:(id)sender { /* body体:/*address = ""; comment = "\\U7c7b\\U6a21\\U5757\\U8ba1\\U5212\\U7528\\U5230\\U7b2c\\U4e09\\U90e8\\U5206\\U4e2d\\Uff0c\\U5f85\\U63d0\\U95ee\\U3001\\U56de\\U7b54\\U79ef\\U7d2f\\U5230\\U4e00\\U5b9a\\U6570\\U91cf\\U65f6\\Uff0c\\U4fbf\\U4e8e\\U5927\\U5bb6\\U7684\\U95ee\\U9898\\U7684\\U5feb\\U901f\\U67e5\\U627e\\Uff0c\\U6240\\U4ee5\\U63d0\\U95ee\\U90e8\\U5206\\U6682\\U65f6\\U4e0d\\U52a0\\U5165\\U8fd9\\U4e2a"; do = "add_comment"; kind = task; "member_id" = zpHr2dsRvQQxYJxo2; other = ""; "task_id" = 55a47e79ec25e3641;*/ NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php"; NSString *comment = @"类模块计划用到第三部分中,待提问、回答积累到一定数量时,便于大家的问题的快速查找,所以提问部分暂时不加入这个"; comment = [comment stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:@"" forKey:@"address"]; [dict setObject:comment forKey:@"comment"]; [dict setObject:@"add_comment" forKey:@"do"]; [dict setObject:@"task" forKey:@"kind"]; [dict setObject:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"]; [dict setObject:@"" forKey:@"other"]; [dict setObject:@"55a47e79ec25e3641" forKey:@"task_id"]; [self.session POST:urlStr parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) { NSLog(@"上传"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败"); }]; } @end
注意事项
AFNetworking可以进行JSON数据解析/Plist数据解析(不支持XML数据解析)
URL字符串中如果有特殊字符或者中文字符,AFNETWorking并没有做UTF8的转码,需要:
url =
[urlStr stringByAddingPercentEncodingWithAllowedCharacters:NSUTF8StringEncoding];
代码实例:
#pragma mark - POST请求2的响应方法 - (IBAction)postRequest2Action:(id)sender { NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php"; NSString *commonContent = @"类模块计划用到第三部分中,待提问、回答积累到一定数量时,便于大家的问题的快速查找,所以提问部分暂时不加入这个"; commonContent = [commonContent stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; // 当body体或URL中出现汉字时使用 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setValue:@"" forKey:@"address"]; [dict setValue:commonContent forKey:@"comment"]; [dict setValue:@"add_comment" forKey:@"do"]; [dict setValue:@"task" forKey:@"kind"]; [dict setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"]; [dict setValue:@"" forKey:@"other"]; [dict setValue:@"55a47e79ec25e3641" forKey:@"task_id"]; [self.session POST:urlStr parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) { NSLog(@"上传成功"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"请求成功:%@", responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败"); }]; }
以上是关于第三方的主要内容,如果未能解决你的问题,请参考以下文章
解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段