Objective-C AFnetworking:停止请求

时间:2016-11-15 20:09:51

标签: objective-c api networking

晚上,我正在使用Marvel-API,尝试下载所有角色。

要下载所有必须执行多个请求的字符,请在每个请求中指定限制和偏移量。

所以我将限制设置为最大值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 func,无论是什么继续请求数据。

任何提示?

1 个答案:

答案 0 :(得分:2)

post可能有所帮助。尝试:

[manager.operationQueue cancelAllOperations];