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