iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler:无法从completition块内部检索数据

时间:2015-03-10 16:20:21

标签: ios objective-c json afnetworking

这是我的代码:

 //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 mutablearray,同时在成功代码块中。

但是,当应用程序离开成功块时,联盟团队阵列就会消失。它在内存中不存在,即使是一个空数组,就像在执行成功块之前一样。

我可能在尝试将数据传递到代码块内的外部变量时做了一些非常错误的事情,但所有其他类似的问题都有及时无法从服务器获取数据的麻烦,但在我的情况下数据请求总是成功和JSON响应并将其转换为NSDICtionary所有工作正常....所以任何人都可以帮忙吗?感谢

1 个答案:

答案 0 :(得分:2)

好的," dataTaskWithRequest发生了什么:completionHandler:"方法是异步的!一旦它启动,程序执行不会等待它返回值,它继续到它之外的下一行。因此,您在此方法下面编写的代码可能首先执行完成处理程序中的代码。所以你可以做的是触发一个Notification或调用一些委托方法在完成Handler返回所需的值后运行任何代码。