AFNetworking框架的几个细节
2016-08-01 14:41
288 查看
1.比如上拉刷新会加载更多数据(发送网络请求),如果用户马上下拉刷新去加载最新数据。这样同时就有2个网络请求了。为了更好的用户体验,我们应该在最后一次请求的时候,取消上一次请求。
所以我们需要保存AFHTTPSessionManager对象。
2.那么如何结束之前的请求呢?
3.在控制器销毁的时候也要结束全部网络请求
4.加载最新数据和加载更多数据的示例代码:
所以我们需要保存AFHTTPSessionManager对象。
/** * 管理者 */ @property(nonatomic,strong)AFHTTPSessionManager *manager;
- (AFHTTPSessionManager *)manager { if (!_manager) { _manager = [AFHTTPSessionManager manager]; } return _manager; }
2.那么如何结束之前的请求呢?
// 结束之前的所有请求 [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
3.在控制器销毁的时候也要结束全部网络请求
/** * 控制器销毁时调用 */ - (void)dealloc { // 取消所有网络任务 [self.manager invalidateSessionCancelingTasks:YES]; }
4.加载最新数据和加载更多数据的示例代码:
/**
* 加载更多评论
*/
- (void)loadMoreComments
{
// 结束之前的所有请求 [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
NSInteger page = self.page + 1;
// 准备参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"dataList";
params[@"c"] = @"comment";
params[@"data_id"] = self.topic.ID;
params[@"hot"] = @"1";
params[@"page"] = @(page);
Comment *cmt = [self.latestComments lastObject];
params[@"lastcid"] = cmt.ID;
[self.manager GET:@"https://api.budejie.com/api/api_open.php" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 最新评论
NSArray *newComments = [Comment mj_objectArrayWithKeyValuesArray:responseObject[@"data"]];
[self.latestComments addObjectsFromArray:newComments];
// 页码
self.page = page;
// 刷新数据
[self.tableView reloadData];
// 控制上拉刷新控件的状态
NSInteger total = [responseObject[@"total"] integerValue];
if (self.latestComments.count >= total) { //全部加载完毕
[self.tableView.mj_footer endRefreshingWithNoMoreData];
}else{
[self.tableView.mj_footer endRefreshing];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 结束下拉刷新
[self.tableView.mj_footer endRefreshing];
}];
}
/**
* 加载更多评论数据
*/
- (void)loadNewComment
{
// 结束之前的所有请求 [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
// 准备参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"dataList";
params[@"c"] = @"comment";
params[@"data_id"] = self.topic.ID;
params[@"hot"] = @"1";
[self.manager GET:@"https://api.budejie.com/api/api_open.php" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 最热评论
self.hotComments = [Comment mj_objectArrayWithKeyValuesArray:responseObject[@"hot"]];
// 最新评论
self.latestComments = [Comment mj_objectArrayWithKeyValuesArray:responseObject[@"data"]];
// 页码
self.page = 1;
// 刷新数据
[self.tableView reloadData];
// 结束下拉刷新
[self.tableView.mj_header endRefreshing];
// 控制上拉刷新控件的状态
NSInteger total = [responseObject[@"total"] integerValue];
if (self.latestComments.count >= total) { //全部加载完毕
[self.tableView.mj_footer endRefreshingWithNoMoreData];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 结束下拉刷新
[self.tableView.mj_header endRefreshing];
}];
}
相关文章推荐
- php函数传值的几个细节,及对应实例代码
- JavaScript应注意的几个细节
- linux内核抢占的几个细节
- 几个音频格式细节备记(混)
- C/C++几个面试常见细节问题及解答
- (转)玩玩小爬虫——抓取时的几个小细节
- cocosbuilder 游戏动画开发利器-值得注意的几个细节
- 浅谈大型网站开发要注意的几个细节
- SEO不可忽略的几个优化细节
- 串口GSM MODEM调试中的几个细节
- 提高流程效率的几个细节 [ 光影人像 东海陈光剑 的博客 ]
- 玩玩小爬虫——抓取时的几个小细节
- 最近用struts2,遇到几个出错时未能打log的问题,算是小细节吧,记录一下!写代码必须继续坚持良好习惯!
- servlet的几个细节
- 京东IPO的几个细节:费用率已无处可降
- SAS学习笔记(四)——关于数据整合的几个细节
- 关于Windows优化大师的几个小细节
- 几个容易出错的css盒子模型细节
- C/C++ 指针删除的几个细节