Ios 目标-C将变量从块中取出
我正在努力从一个块中取出一个变量。这似乎是一件很基本的事情,但我搞不懂!我如何访问它?e、 g.Ios 目标-C将变量从块中取出,ios,objective-c,Ios,Objective C,我正在努力从一个块中取出一个变量。这似乎是一件很基本的事情,但我搞不懂!我如何访问它?e、 g.usercity是否在区块外?Usercity在.h中声明为NSString [ceo reverseGeocodeLocation: loc completionHandler: ^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = [placemarks objectAtIndex:0]; //
usercity
是否在区块外?Usercity在.h中声明为NSString
[ceo reverseGeocodeLocation: loc completionHandler:
^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
//NSLog(@"placemark %@",placemark);
//String to hold address
//NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
//NSLog(@"addressDictionary %@", placemark.addressDictionary);
//NSLog(@"placemark %@",placemark.region);
NSLog(@"Land %@",placemark.country); // Give Country Name
NSLog(@"City %@",placemark.locality); // Extract the city name
NSLog(@"Adresse %@",placemark.name);
//NSLog(@"location %@",placemark.ocean);
NSLog(@"Zip %@",placemark.postalCode); //ZipCode
NSLog(@"sonstiges %@",placemark.subLocality);
//Save values in variables
usercountry = placemark.country;
usercity = placemark.locality;
userzip = placemark.postalCode;
NSLog(@"usercity: %@",usercity);
//NSLog(@"location %@",placemark.location);
}
];
块中的代码必须将usercity存储在所需的位置。你不能从一个块中“得到一些东西”,块中的代码必须这样做
您知道块可以访问周围方法中的所有变量,是吗 这就是你要找的吗
__block NSString *userCity;
[ceo reverseGeocodeLocation: loc completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
...
userCity = placemark.locality;
}];
但是,如果您希望能够在块之外检查它的值,则必须在完成处理程序更新该值之后进行检查。也许可以把它变成一个属性,例如,
self.userCity
?这与Xcode没有任何关系。这个解决了我的问题:是的,我知道它可以访问它周围的变量。但是当我在我的类中的任何地方打印块外的usercity时,它是空的?!我把它变成了财产。比如self.userCity=placemark.locality。但是当我在块之后打印属性时,它仍然是空的。我真的不了解区块,但我只想在我的项目中获得用户所在的城市。不仅在街区。当我在诸如“NSLog”(“用户城市%@”,self.usercity)之类的块后打印我的城市时;即使以同样的方式在街区内部。首先打印街区之后的打印。其次是街区内部的打印。就像另一种方式一样。因此,在这种情况下,我可以想象,当我在街区外部打印城市时,街区没有运行。您可能应该了解更多关于街区的信息。简短版本是您正在使用的方法重新传递该块以异步执行它(稍后),在此时运行其余代码之后。我不确定您的级别,但以下是异步编程的一般说明:,。此外,如果您需要在完成处理程序中获得placemark后执行某些操作,例如更新UI,则只需要在完成处理程序中执行。我认为这已经超出了我的理解范围对不起,我弄不明白。你能提供一些代码吗?我两天以来一直在解决这个问题。我只是想在我的项目中将城市作为一个普通变量。例如,我可以用另一种方法访问/打印它。嘿!我完全迷路了。。。