gpt4 book ai didi

ios - 反向地址解析-返回位置

转载 作者:行者123 更新时间:2023-12-01 17:26:07 24 4
gpt4 key购买 nike

我无法在iOS上的Objective C中使用反向地理编码来返回城市。我可以在completionHandler中记录城市,但是如果从另一个函数调用它,我似乎无法弄清楚如何将其作为字符串返回。

city变量是在头文件中创建的NSString。

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

geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

if ([placemarks count])
{

placemark = [placemarks objectAtIndex:0];

city = placemark.locality;

}
}];

return city;

}

最佳答案

您的设计不正确。

由于您正在执行异步调用,因此无法在方法中同步返回值。
completionHandler是一个将来会被调用的块,因此在调用该块时,您必须更改代码结构以处理结果。

例如,您可以使用回调:

- (void)findCityOfLocation:(CLLocation *)location { 
geocoder = [[CLGeocoder alloc] init];
typeof(self) __weak weakSelf = self; // Don't pass strong references of self inside blocks
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
if (error || placemarks.count == 0) {
[weakSelf didFailFindingPlacemarkWithError:error];
} else {
placemark = [placemarks objectAtIndex:0];
[weakSelf didFindPlacemark:placemark];
}
}];
}

- (void)didFindPlacemark:(CLPlacemark *)placemark {
// do stuff here...
}

- (void)didFailFindingPlacemarkWithError:(NSError *)error {
// handle error here...
}

或一个方块(我通常更喜欢)
- (void)findCityOfLocation:(CLLocation *)location completionHandler:(void (^)(CLPlacemark * placemark))completionHandler failureHandler:(void (^)(NSError *error))failureHandler { 
geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
if (failureHandler && (error || placemarks.count == 0)) {
failureHandler(error);
} else {
placemark = [placemarks objectAtIndex:0];
if(completionHandler)
completionHandler(placemark);
}
}];
}

//usage
- (void)foo {
CLLocation * location = // ... whatever
[self findCityOfLocation:location completionHandler:^(CLPlacemark * placemark) {
// do stuff here...
} failureHandler:^(NSError * error) {
// handle error here...
}];
}

关于ios - 反向地址解析-返回位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384302/

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