gpt4 book ai didi

iphone - 返回从 block 内部设置的 NSString

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:10:26 25 4
gpt4 key购买 nike

我有一个看起来像这样的方法:

-(NSString *)getCityFromLocation:(CLLocation *)location {

__block NSString *city;

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder reverseGeocodeLocation: location completionHandler:
^(NSArray *placemarks, NSError *error) {

//Get address
CLPlacemark *placemark = [placemarks objectAtIndex:0];

city = [placemark.addressDictionary objectForKey:@"City"];

NSLog(@"city 1: %@", city);

}];

return city;
}

我这样调用它:

NSString *city = [self getCityFromLocation:currentLocation];

NSLog(@"city 2: %@", city);

在 NSLog 中,我得到:

city 2: (null)
city 1: London

问题很明显 - 它在运行 block 之前就返回了。我怎样才能让它按预期工作,它可以返回 block 产生的值?

最佳答案

最初,您已将完成 block 分配给 reverseGeocodeLocation。但它当时不打电话。它会在反向地理编码过程完成时调用。但是 city 会立即返回。这就是为什么你会变成这样。

您可以通过将其分配给本地属性来解决。当完成 block 被执行时。所以代码应该是。

[geocoder reverseGeocodeLocation: location completionHandler:
^(NSArray *placemarks, NSError *error) {

//Get address
CLPlacemark *placemark = [placemarks objectAtIndex:0];

self.city = [placemark.addressDictionary objectForKey:@"City"];

}];

关于iphone - 返回从 block 内部设置的 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com