AFNetworking框架的幾個細節
阿新 • • 發佈:2019-02-14
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];
}];
}