iOS 后台交互(AFNetworking)

我们前端的少不了和后台的交互。
如果我们只会前端,后台的知识不是很懂的时候就交互的时候就会出现很多问题。当我们通过接口访问后台的出错的时候,如果感觉自己代码没问题,一定要找后台连调。有的时候时候,后台更新了接口。没有更新文档,那真是要人老命的一件事情。。

AFNetworing

我们做iOS,通过后台的给的接口得到一些我们想要的数据(json或者xml)。其实用苹果原本的SDK也可以,不过其中很多性能问题,像加载数据和更新界面。毕竟大牛们都优化过了.
记录一下 AFN常用的一些操作
首先要向后台请求数据
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];这边要注意,这不是一个单例。 我当年以为这是一个单例,差点被玩死、、、、、
接着
[manager POST:url parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { fail(error); }]; get 和post 差不多。
这边要注意的点很多,因为大家是做项目后台都不一样。我们需要配置一些manager的一些属性才能正常的运行。
这边列举几个经典的错误。

1 请求数据

1.1 纯404

这种简单 有两种情况 1参数错误 2服务器没开

1.1 -1016

在进行网络请求时出现-1016 是因为只支持
text/json,application/json,text/javascript
你可以添加text/html
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];

1.2 3840

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x9152780 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
这个东西 加上就 好了
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer];
2.500+ 500 就是服务器的问题了

附 错误码

1xx - 信息提示
2xx - 成功
3xx - 重定向
4xx - 客户端错误***

5xx - 服务器端错误

具体错误信息传送门http://www.cnblogs.com/adforce/archive/2011/12/25/2301050.html

===

一般我们在项目中根据需求不同,都会把afn 二次封装一下,方便我们的使用。封装的方法 一般oc用代码块,swift 用必要。返回错误或者正确的信息,这边我对上面的POST请求简单的封装了一下,代码贴上来
`.h + (void) postCallback:(NSDictionary *) para url:(NSString *) url success:(void (^)(id response))success fail:(void (^)(NSError *errror))fail;

.m + (void)postCallback:(NSDictionary *)para url:(NSString *)url success:(void (^)(id))success fail:(void (^)(NSError *))fail {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:url parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(error);
}];
}
`
其实就是把具体的请求封装起来,操作完成后。回调返回的信息,或者错误信息。代码块可是神器。

上传图片

首先NSURLSession 分为两种
1.NSURLSessionManager
2.NSHTTPSessionManager

其实这两种都可以上传

NSURLSessionManager

这一种在 系统的readme 和github 上都有例子
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"Success: %@ %@", response, responseObject); }}];[uploadTask resume];
这种是知道文件文件路径,之后上传。

还有一直传图片的形式是

NSHTTPSessionManager

这是http session 使我们经常向后台请求数据用的。
我么可以图片放在http body里面上传,这是现在我们后台要求的方法
` AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];
[manager POST:KPhotoURL parameters:@{@"method":@"updatePhoto",@"userID":_oldInfoDict[@"userID"]} constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    [formData appendPartWithFileData:UIImageJPEGRepresentation(img,0.01) name:@"FileData" fileName:@"text.jpg" mimeType:@"image/jpg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    
}];

`

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容