我在块内为NSString设置值时遇到问题。
__block NSString *cityID = [[NSString alloc] init];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
cityID = [NSString stringWithFormat:@"%@",[[json valueForKeyPath:@"location"] valueForKey:@"id"]];
NSLog(@"city id for 621352674 = %@",cityID);
} failure:nil];
[operation start];
NSLog(@"city id for 621352674 = %@",cityID);
第一个NSLog向我显示cityID的正确值。但第二个没有给我看。如何解决这个问题?
答案 0 :(得分:4)
第二个NSLog()
不等待块完成。这实际上就是操作的重点:它在后台运行,以便在通过网络获取数据时,主线程以及应用程序的UI不会锁定。在您开始操作后立即进入该调用时,该字符串的值未更改。如果您更改NSLog()
s:
NSLog(@"In Block: city id for 621352674 = %@",cityID);
} failure:nil];
[operation start];
NSLog(@"After operation start: city id for 621352674 = %@",cityID);
你可能会发现正在发生的事情更清楚。
答案 1 :(得分:3)
实际上第二个NSLog是第一个,第一个NSLog在那之后......所以你收到的反馈是正确的。你没有问题,设置了你的字符串值,操作完成后......