iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler: 无法从内部完成块中检索数据
iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler: can't retrieve data from inside completition block
这是我的代码:
//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,同时在成功代码中阻止。
但是,一旦应用程序离开成功块,leagueTeams 数组就会消失。它甚至作为一个空数组也不存在于内存中,就像它在执行成功块之前所做的那样。
我可能在尝试将数据传递给代码块内的外部变量时做错了,但所有其他类似的问题都存在无法及时从服务器获取数据的问题,但就我而言数据请求总是成功的, JSON 响应并将其转换为 NSDICtionary 一切正常......所以有人可以帮忙吗?谢谢
好的,"dataTaskWithRequest:completionHandler:" 方法是异步的!一旦开始,程序执行不会等待它达到 return 值,它会继续到它之外的下一行。因此,您在此方法下方编写的代码可能比完成处理程序中的代码先执行。因此,您可以做的是触发一个通知或调用一些委托方法 运行 完成处理程序 return 所需值后的任何代码。
这是我的代码:
//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,同时在成功代码中阻止。
但是,一旦应用程序离开成功块,leagueTeams 数组就会消失。它甚至作为一个空数组也不存在于内存中,就像它在执行成功块之前所做的那样。
我可能在尝试将数据传递给代码块内的外部变量时做错了,但所有其他类似的问题都存在无法及时从服务器获取数据的问题,但就我而言数据请求总是成功的, JSON 响应并将其转换为 NSDICtionary 一切正常......所以有人可以帮忙吗?谢谢
好的,"dataTaskWithRequest:completionHandler:" 方法是异步的!一旦开始,程序执行不会等待它达到 return 值,它会继续到它之外的下一行。因此,您在此方法下方编写的代码可能比完成处理程序中的代码先执行。因此,您可以做的是触发一个通知或调用一些委托方法 运行 完成处理程序 return 所需值后的任何代码。