1. 程式人生 > >AFNetworking框架的幾個細節

AFNetworking框架的幾個細節

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]; }]; }