更改块内的NSString值

时间:2012-05-07 19:53:06

标签: objective-c ios

我在块内为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的正确值。但第二个没有给我看。如何解决这个问题?

2 个答案:

答案 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在那之后......所以你收到的反馈是正确的。你没有问题,设置了你的字符串值,操作完成后......