gpt4 book ai didi

ios - reverseGeocodeLocation 只执行一次完成 block

转载 作者:行者123 更新时间:2023-11-29 10:44:04 28 4
gpt4 key购买 nike

我有一个坐标数组,我使用 for 循环遍历这些坐标。我想在 map 上为每个位置放置注释,并将标注的副标题作为坐标的地址,通过使用 reverseGeocodeLocation 在 for 循环中,我调用 reverseGeocodeLocation 方法,并在完成 block 内创建注释并将其显示在 map 上。但是,当我运行该应用程序时,只显示一个注释。我进入调试器,完成 block 只被调用一次(两次调用 reverseGeocodeLocation 方法)。有什么解决这个问题的建议吗?

我的 for 循环:

for(int i = 0; i < [locations count]; i++)
{
CLLocation *location = [locations objectAtIndex:i];
__block NSString *info;
NSLog(@"Resolving the Address");
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
{
NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
if (error == nil && [placemarks count] > 0)
{
placemark = [placemarks lastObject];
info = [NSString stringWithFormat:@"%@ %@ %@ %@, %@",
placemark.subThoroughfare, placemark.thoroughfare,
placemark.postalCode, placemark.locality,
placemark.administrativeArea];
[self remainderOfMethod:location withAddress:info atIndex:i];
}
else
{
NSLog(@"%@", error.debugDescription);
}
} ];
}

以及在完成 block 调用的方法:

- (void) remainderOfMethod: (CLLocation *)location withAddress:(NSString *)info atIndex: (int)i
{
MKPointAnnotation* annotation = [[MKPointAnnotation alloc] init];
if (location != nil)
{
[annotation setSubtitle:[NSString stringWithFormat:@"%@", info]];
annotation.coordinate = location.coordinate;
[self.mapView addAnnotation:annotation];
}
}

谢谢!

最佳答案

来自苹果官方文档:

After initiating a reverse-geocoding request, do not attempt to initiate another reverse- or forward-geocoding request

您可以在此处找到文档:https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html#//apple_ref/occ/instm/CLGeocoder/reverseGeocodeLocation:completionHandler :

解决它的一种方法是在递归方法中一次只执行一个请求,该方法在每次迭代时从堆栈(或数组)中弹出一个位置。

即使在那种情况下,请考虑 Apple 对此的看法:

Geocoding requests are rate-limited for each app, so making too many requests in a short period of time may cause some of the requests to fail

因此您可能希望按需请求地理编码,例如当用户点击注释时。

关于ios - reverseGeocodeLocation 只执行一次完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23072591/

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