这是我的代码:
//create array with all the teams
NSMutableArray *leagueTeams = [[NSMutableArray alloc] init];
//send request
[[sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSDictionary *responseFromJSONDictionary = (NSDictionary *) responseObject;
//copy the team's attributes into temp variables
NSString *tempTeamIDCode = [responseFromJSONDictionary objectForKey:@"teamCode"];
NSString *tempTeamName = [responseFromJSONDictionary objectForKey:@"teamName"];
NSInteger tempTeamPoints = [(NSNumber *) [responseFromJSONDictionary objectForKey:@"teamPoints"] integerValue];
//use temp variables to create a temporary team
Team *aTeam = [[Team alloc] initWithTeamIdCode:tempTeamIDCode andTeamName:tempTeamName andLeaguePoints:tempTeamPoints];
//add team to array
[leagueTeams addObject:[aTeam copy]];
}]resume];
我正在尝试制作一个从服务器检索 JSON 数据的应用程序。现在我使用静态 JSON 来检索条目。我使用断点来跟踪变量值。该应用程序成功检索了 JSON 数据,它成功创建了 3 个临时变量并成功创建了团队对象并成功将该对象添加到 leageTeams 可变数组,同时位于成功代码块内。
但是,一旦应用程序离开成功 block ,leagueTeams 数组就会消失。即使是空数组,它也不存在于内存中,就像在执行成功 block 之前那样。
尝试将数据传递给代码块内的外部变量时,我可能做错了一些事情,但所有其他类似问题都无法及时从服务器获取数据,但在我的情况下,数据请求总是成功的,JSON 响应并将其转换为 NSDICtionary 一切正常......所以有人可以帮忙吗?谢谢
最佳答案
好的,“dataTaskWithRequest:completionHandler:”方法是异步的!一旦开始,程序执行不会等待它返回值,它会继续到它之外的下一行。因此,您在此方法下方编写的代码可能比完成处理程序中的代码先执行。因此,您可以做的是在完成处理程序返回所需值后触发一个通知或调用一些委托(delegate)方法来运行任何代码。
关于iOS Objective-C AFNetworking dataTaskWithRequest :completionHandler: can't retrieve data from inside completition block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28968872/