【发布时间】:2016-11-15 20:09:50
【问题描述】:
晚上,我正在使用 Marvel-API,尝试下载所有角色。
要下载所有字符,您必须执行多个请求,在每个请求中您可以指定限制和偏移量。
所以我将限制设置为最大值 100,并且对于每个请求,我都会将偏移量增加 100。
这样做,我做了无限的请求。当然。
所以我认为当从 JSON 对象中检索到的“结果”数组为空时,我应该停止。
所以逻辑应该是好的,我不断请求字符 100 x 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 无论如何都会继续请求数据。
有什么建议吗?
【问题讨论】:
标签: objective-c api networking