2016-11-15 125 views
1

晚上,我正在使用Marvel-API,試圖下載所有的字符。Objective-C AFnetworking:停止請求

要下載所有需要進行多個請求的字符,請在每個請求中指定限制和偏移量。

所以我設定的上限在100最大和爲每個請求我增加100

偏移這樣做,我做無限的請求。當然。

所以我認爲我應該停止從JSON對象檢索到的「結果」數組爲空。

所以邏輯應該是好的,我一直要求100個字符100,直到沒有更多的檢索。

但是,當然,使用網絡和異步代碼並不總是那麼容易。顯然我有貨。

我敢肯定,問題是這行代碼:

#pragma mark - Requesting data 
-(void)getData { 
    NetworkManager *networkManager = [NetworkManager alloc]; 


    while(self.requestMustEnd == false) { 
     NSLog(@"offset: %d", networkManager.offset); 

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
     [manager GET:networkManager.getUrlPath parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
      NSLog(@"JSON: %@", responseObject); 
      [self parseResponseData:responseObject]; 
     } failure:^(NSURLSessionTask *operation, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }]; 

     [networkManager increaseOffset]; 
    } 

} 


#pragma mark - Parsing Method 

-(void)parseResponseData:(NSDictionary *)responseDictionary { 
    NSArray *marvelArray = [[responseDictionary objectForKey:@"data"] objectForKey:@"results"]; 
    if (marvelArray.count == 0) { 
     self.requestMustEnd = true; 
    } 
    for(NSDictionary* marvel in marvelArray) 
    { 
     Character *currentMarvelEntity = [[Character alloc] initWithMarvel:marvel]; 
     //NSLog(@"currentMarvelEntity %@", currentMarvelEntity.name); 
     [self.marvelCharacters addObject:currentMarvelEntity]; 
    } 
    [self.tableView reloadData]; 
} 

的關鍵部件停止請求:

if (marvelArray.count == 0) { 
     self.requestMustEnd = true; 
    } 

但是,儘管如此,它永遠不會結束,以請求。我敢肯定,這不是因爲if條件。但可能是因爲有一個異步代碼,getData函數無論是否保存請求數據。

任何提示?

回答

2

This post may help。試試:

[manager.operationQueue cancelAllOperations];