您的位置:首页 > 其它

AFNetworking框架的几个细节

2016-08-01 14:41 288 查看
1.比如上拉刷新会加载更多数据(发送网络请求),如果用户马上下拉刷新去加载最新数据。这样同时就有2个网络请求了。为了更好的用户体验,我们应该在最后一次请求的时候,取消上一次请求。

所以我们需要保存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];
}];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: