ブロックを通過した後、グローバル変数に再びアクセスできない理由に困惑しています。これが私のコードです:
__block NSString *latitude;
__block NSString *longitude;
CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
[geoCoder geocodeAddressString:location completionHandler:^(NSArray* placemarks, NSError* error)
{
for (CLPlacemark* aPlacemark in placemarks)
{
CLLocation *latLong = aPlacemark.location;
latitude = [NSString stringWithFormat:@"%f", latLong.coordinate.latitude];
longitude = [NSString stringWithFormat:@"%f", latLong.coordinate.longitude];
//works fine
NSLog(@"CLLOCATION SSSSSSSSSSSSSSSSSSSSSS LAT: %@, LONG: %@", latitude, longitude);
}
}];
//no bueno
NSLog(@"CLLOCATION SSSSSSSSSSSSSSSSSSSSSS LAT: %@, LONG: %@", latitude, longitude);
今NSString
、さまざまな方法で s を初期化しようとしました。
__block NSString *latitude = @"";
__block NSString *longitude = @"";
と:
__block NSMutableString *latitude = [NSMutableString string];
__block NSMutableString *longitude = [NSMutableString string];
しかし、ブロックの外側の変数にアクセスしているときに、空の文字列を取得してしまいます。
Apple のドキュメントhttp://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxGettingStarted.html#//apple_ref/doc/uid/TP40007502-CH7-SW1では、これは特に不可解です。
、ブロックの外側で変数を設定し、それらを使用し、それらをうまく取得できます。