1.cocoapods
http://www.jianshu.com/p/6e5c0f78200a
http://www.jianshu.com/p/0dfe9e404910
sudo gem install cocoapods
$ gem sources -l (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
$ sudo gem update --system
$ pod setup
pod search AFNetworking
pod install
pod update
文章里大部分内容差不多, 注意在终端里安装好pod以后 直接执行pod会看看 pod的一些使用方法
其中Podfile文件直接在工程路径下 pod init就生成了,是不是很方便 不用touch 或者vim
你会发现pod list
插播一句
(1). touch ~/.lldbinit
(2). echo display @import UIKit >> ~/.lldbinit
(3). echo target stop-hook add -o "target stop-hook disable" >>
~/.lldbinit
要想使用 po self.view.frame 不报错,可以使用上面终端命令哦
要想删除rm ~/.lldbinit 命令即可.
2.AFNetworking
说点啥呢,说点最简单的用法好吧,之前项目工程一直使用的ASI,现在阵营已经转向AFN了, 所以我们简单说一下AFN的使用吧。
https://github.com/AFNetworking/AFNetworking 在github上推荐了url loading systemhttps://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html
建议大家看看上面官网的东西。
看一下NSURLSession吧
http://blog.csdn.net/djl4104804/article/details/22667273
http://blog.csdn.net/jymn_chen/article/details/18937819 (推荐看这一个)有些文章的翻译实在感觉不太好,这个比较清晰,还不错。
在这里给大家粘贴一点有用的学习代码吧
//请求简单的封装代码
+(void)requestWithurl:(NSString *)url andParameters:(NSDictionary *)params AndView:(UIView *)view AndShowIndicator: (BOOL) show success:(void(^)(NSDictionary *responseObj))success failure:(void(^)(NSError *error))failure
{
if (![[[NSUserDefaults standardUserDefaults]objectForKey:FORCEUPDATE]isEqualToString:@"YES"]){
//获得请求管理者
AFHTTPRequestOperationManager *mgr = [UrlRequest shareManager];
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
//添加请求头
mgr.requestSerializer.timeoutInterval = 10;
SFRequestSerializerInfo *info=[SFRequestSerializerInfo sharedSLListRequestInfo];
[info afManagerRequestSerializerSet:mgr];
UIViewController *VC=[self viewController:view];;
if (show) {
//显示加载动画
[self setupCustomKVNProgressUI];
[KVNProgress showWithParameters:@{KVNProgressViewParameterBackgroundType: @(KVNProgressBackgroundTypeSolid),
KVNProgressViewParameterFullScreen: @(YES)}];
}
[mgr POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary * resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
SouLog(@"返回数据: %@", resultDic);
if(show){
[KVNProgress dismiss];
}
success(resultDic);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
if (show){
[KVNProgress dismiss];
[VC showToastViewWithContent:@"获取数据失败"];
}
}];
}
}
//1.网络状态的判断
-(void)testNetState{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSArray *array = @[@"不知道",@"不可达",@"3G",@"wifi"];
NSLog(@"%@",array[status+1]);
}];
//开启监听
[manager.reachabilityManager startMonitoring];
}
//2.图片的下载
-(void)testdownloadImage{
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];
[self.view addSubview:imageView];
NSURL *url = [NSURL URLWithString:@"http://10.0.176.193/iOS_PHP/upload/1.jpg"];
//第一种方法
[imageView setImageWithURL:url];
//第二种方法 可以显示原始图片的大小
[imageView setImageWithURLRequest:[NSURLRequest requestWithURL:url] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
imageView.frame = CGRectMake(10, 10, image.size.width, image.size.height);
imageView.image = image;
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
}];
}
//3.数据的下载
-(void)testdownload{
NSString *path = @"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip";
//创建下载的管理类
AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
/**
下载数据
第一个参数:封装后的接口
第二个参数:进度
第三个参数:下载图片后,存储图片的地址
第四个参数:下载成功后执行的操作
*/
//进度类
NSProgress *progress = nil;
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:path]] progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
//获取当前应用的沙盒路径
NSLog(@"%@",NSHomeDirectory());
NSString *path = [NSString stringWithFormat:@"%@/Documents/temp.zip",NSHomeDirectory()];
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
//手动开启下载
[downloadTask resume];
//利用kvo(key-value observing) 键值观察
//过程 让当前的控制器对象监听NSProgress对象的控制下载进度的属性的变化
//让当前对象作为观察者
//@"fractionCompleted" :被观察的属性
//NSKeyValueObservingOptionOld:上一时刻的值
//NSKeyValueObservingOptionNew:当前时刻的值
[progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
}
//观察者执行的方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"keyPath:%@,object:%@,change:%@",keyPath,object,change);
CGFloat value = [[object valueForKeyPath:keyPath] floatValue];
//要通过多线程的方式获取实时数据
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
_progressView.progress = value;
}];
}
//4.post方法实例(上传图片)
-(void)testUploadImageWithPost{
NSString *path = @"http://10.0.176.193/iOS_PHP/upload.php";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//使用post上传图片
[manager POST:path parameters:nil constructingBodyWithBlock:^(id formData) {
//获取图片的位置
NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"menu_bg_01-hd.jpg" ofType:nil];
/**
第一个参数:原始图片的位置URL
第二个参数:添加的时php文件中对应位置的key
第三个参数:上传后的文件的名字
第四个参数:文件的类型(图片的类型)
fileURLWithPath:取的是本地文件的路径
urlWithString:取的是网络的路径
*/
[formData appendPartWithFileURL:[NSURL fileURLWithPath:imagePath] name:@"file" fileName:@"1234.jpg" mimeType:@"image/jpg" error:nil];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {//成功时执行
NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {//失败时执行
NSLog(@"%@",error.localizedDescription);
}];
}
//5.使用post方法请求数据
-(void)testPost{
NSString *path = @"http://10.0.176.193/iOS_PHP/login.php";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
/**
* post请求 登录
*
第一个:网址(接口)
第二个:附加信息
第三个:成功后操作
第四个:失败后操作
*/
[manager POST:path parameters:@{@"user":@"fenbingbing",@"password":@"123456"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error:%@",error.localizedDescription);
}];
}
//6.get方法实例
-(void)testGetInstance{
NSString *path = @"http://www.weather.com.cn/data/cityinfo/101010100.html";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
//用get请求数据
[manager GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"数据:%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
//解析数据
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSDictionary *subDic = dic[@"weatherinfo"];
NSLog(@"城市:%@",subDic[@"city"]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"提示:%@",error.localizedDescription);
}];
}
//7.使用get方法请求数据
-(void)testGet{
//接口
NSString *path = @"http://www.baidu.com";
//网络数据请求的管理类
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//设置网络传输的类型是二进制等信息
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//content-type 可以接受的数据类型(可选)
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
/**
* get请求方式
*
* 第一个:接口
第二个:附加信息
第三个:block(下载成功后的操作)
第四个:block(下载失败后的操作)
*/
[manager GET:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {//成功 responseObject:下载得到的数据
NSString *string = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"string:%@",string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {//失败
}];
}
好的。让我回归到AFN上的官网上:
http://cocoadocs.org/docsets/AFNetworking/3.0.4/
以上是AFNetworking的简单使用
3.iOS项目编译相关的一些知识
话题引入,在cocoaPods导入AFN过程中遇到了一些问题,主要是框架或者项目工程依赖的问题。现在我们就从最基础的开始谈起好么
(1)首先给大家推荐两篇文章iOS深入学习:构建阶段、编译器错误和连接器错误不知道是不是markdown语法的问题还是网站的问题, 链接失败了我还是直接打上链接吧http://my.oschina.net/leejan97/blog/222856?p=1
相信看了这个链接的内容, 你也会打开自己的工程看看build phase 里相关的内容吧
-修改,上面链接修改了可以了,是自己把markdown语法搞错了,网上的人连markdown
首先我们来了解下这篇文章【Xcode WorkSpace含静态库多项目依赖编译 】链接地址是http://my.oschina.net/w11h22j33/blog/204337
我在我们工程里用cocoaPods导入AFN,遇到了两个问题:
1.http://blog.csdn.net/ugg/article/details/41778389
2.http://blog.csdn.net/meegomeego/article/details/17567447