我正在为IOS5开发一个iPhone应用程序。我目前使用的是位于CoreLocation框架中的CLGeocoder类。我无法确定完成处理程序块是在结束时调用的,还是在地理编码发生后调用的,还是同时调用的。
我只知道完成处理程序块是在主线程上运行的。是否有人知道完成处理程序块是在地理编码完成时运行的,还是在地理编码器在另一个线程上执行时用于完成手头任务的代码?
发布于 2012-04-24 03:31:29
完成处理程序在地理编码器完成地理编码后运行。换句话说,它是在地理编码任务完成时运行的。它不是用来在地理编码器运行时完成其他任务的。
完成处理程序包含地标和一个错误。如果地理编码成功,您将获得一个placemarks数组。如果不是,您将得到一个错误。
文档中的注释:
此方法将指定的位置数据异步提交到地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,请勿尝试发起另一个正向或反向地理编码请求。
对于每个应用程序,地理编码请求是有速率限制的,因此在短时间内发出太多请求可能会导致一些请求失败。当超过最大速率时,地理编码器将一个值为kCLErrorNetwork的错误对象传递给您的完成处理程序。
@interface MyGeocoderViewController ()
@property (nonatomic, strong) CLGeocoder *geocoder;
@end
@implementation MyGeocoderViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Create a geocoder and save it for later.
self.geocoder = [[CLGeocoder alloc] init];
}
- (void)geocodeAddress:(NSString *)addressString
{
// perform geocode
[geocoder geocodeAddressString:addressString
completionHandler:^(NSArray *placemarks, NSError *error) {
if ((placemarks != nil) && (placemarks.count > 0)) {
NSLog(@"Placemark: %@", [placemarks objectAtIndex:0]);
}
// Should also check for an error and display it
else {
UIAlertView *alert = [[UIAlertView alloc] init];
alert.title = @"No places were found.";
[alert addButtonWithTitle:@"OK"];
[alert show];
}
}];
}
@end发布于 2012-06-21 06:38:23
Apple文档中写道:此方法将指定的位置数据异步提交到地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,请勿尝试发起另一个正向或反向地理编码请求。
不需要使用GCD在IBOulet上分发更新。
http://developer.apple.com/library/ios/#DOCUMENTATION/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html
https://stackoverflow.com/questions/10286398
复制相似问题