Code:https://github.com/dingpwen/FriendsList
这里记录几个问题点
-
使用UITableViewController
新建项目,默认使用的是UIViewController,如果要使用UITableViewController,需要修改Main.storyboard,将其中的view删除,并将Interface Builder中的UIViewController拖到Main.storyboard中,然后注意勾选Is initial View Controller(首页),当然如果你的页面不是首页就不需要勾选:
当然要注意绑定class。 -
支持HTTP
添加如下两项,设置为YES:
-
设置CFNETWORK_DIAGNOSTICS=1
为了方便调试网络问题,需如下设置,这样在控制台可以打印足够的网络访问信息。
从如下位置打开上面的设置:
-
AFNetworking
先贴代码:
- (void)loadData:(NSString *)token{
NSString *url = friendListUrl;
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:token forKey:@"token"];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
//manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"GET:%@", responseObject);
//NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:1 error:nil];
NSDictionary *dic = (NSDictionary*)responseObject;
NSLog(@"ResDic = %@", dic);
NSInteger status = [dic[@"status"] integerValue];
if(status == 200) {
NSArray *friends = dic[@"friends"];
[self parseListData:friends];
if(_delegate) {
[_delegate loadComplete];
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self loadError:error];
}];
}
这里需要注意的是,虽然服务器那边返回的数据已经是json格式字符串,但由于没有指定格式,会被以为是text/html,AF默认是不支持的,所以需要设置:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@“text/html”];
而AF返回的数据默认就是Dictionary的,所以可以直接转换:NSDictionary dic = (NSDictionary)responseObject;
当然,如果你调用GET前设置了序列化,manager.responseSerializer = [AFHTTPResponseSerializer serializer];
那么解析的时候,就需要使用NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:1 error:nil]; 进行转换。
整型的转换: NSInteger status = [dic[@“status”] integerValue];
回调block中引用局部变量:__block NSString *bToken = token;
- 结语
婆娑前行只为心中不悔。