Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.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
Ios 目标-C将变量从块中取出_Ios_Objective C - Fatal编程技术网

Ios 目标-C将变量从块中取出

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]; //

我正在努力从一个块中取出一个变量。这似乎是一件很基本的事情,但我搞不懂!我如何访问它?e、 g.
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,则只需要在完成处理程序中执行。我认为这已经超出了我的理解范围对不起,我弄不明白。你能提供一些代码吗?我两天以来一直在解决这个问题。我只是想在我的项目中将城市作为一个普通变量。例如,我可以用另一种方法访问/打印它。嘿!我完全迷路了。。。