Objective c 目标-C:停止请求

Objective c 目标-C:停止请求,objective-c,api,networking,Objective C,Api,Networking,晚上,我正在使用MarvelAPI,尝试下载所有角色 要下载所有字符,您必须执行多个请求,在每个请求中可以指定限制和偏移量 因此,我将限制设置为最大值100,对于每个请求,我将偏移量增加100 这样做,我做了无限的要求。当然 因此,我认为当从JSON对象检索到的“results”数组为空时,我应该停止 所以逻辑应该是好的,我一直请求100个字符,直到没有更多的字符可以检索 当然,使用网络和异步代码并不总是那么容易。很明显我有存货 我确信问题在于这些代码行: #pragma mark - Requ

晚上,我正在使用MarvelAPI,尝试下载所有角色

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

因此,我将限制设置为最大值100,对于每个请求,我将偏移量增加100

这样做,我做了无限的要求。当然

因此,我认为当从JSON对象检索到的“results”数组为空时,我应该停止

所以逻辑应该是好的,我一直请求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无论什么都会继续请求数据

有什么建议吗?

这可能会有所帮助。尝试:

[manager.operationQueue cancelAllOperations];