Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更改块内NSString的值_Objective C_Ios - Fatal编程技术网

Objective c 更改块内NSString的值

Objective c 更改块内NSString的值,objective-c,ios,Objective C,Ios,我在将值设置为块内的NSString时遇到问题 __block NSString *cityID = [[NSString alloc] init]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHT

我在将值设置为块内的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的正确值。但第二个什么也没告诉我。如何解决此问题?

第二个
NSLog()
没有等待块完成。这实际上就是操作的要点:它在后台运行,这样在通过网络获取数据时,主线程和应用程序的UI就不会被锁定。当您在开始操作后立即调用该调用时,该字符串的值没有更改。如果更改
NSLog()
s中字符串的文字部分:


您可能会更清楚地知道发生了什么。

实际上,第二个NSLog先出现,第一个NSLog在那之后出现。。。所以你收到的反馈是正确的。您没有问题,字符串的值已设置,当操作完成时…

确定的可能重复,我理解。但是如何在块结束后使用我的新值
cityID
?直到块运行后,该值才发生更改,因此您需要在
success
块中执行您需要执行的任何操作,或者从那里调用另一个方法来执行需要执行的操作。
                             NSLog(@"In Block: city id for 621352674 = %@",cityID);
                                 } failure:nil]; 
[operation start];
NSLog(@"After operation start: city id for 621352674 = %@",cityID);