Objective c 更改块内NSString的值
我在将值设置为块内的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
__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);