我正在为 IOS5 开发一个 iPhone 应用程序。我目前正在使用位于 CoreLocation 框架内的 CLGeocoder 类。我无法确定在地理编码发生后或同时调用完成处理程序块。

我只知道完成处理程序块是在主线程上运行的。有谁知道完成处理程序块是在地理编码完成时运行还是在地理编码器在另一个线程上执行时完成手头任务的代码?

最佳答案

完成处理程序在地理编码器完成地理编码后运行。换句话说,它在地理编码任务完成时运行。它不是为了在地理编码器运行时完成其他一些任务。
完成处理程序包含地标和错误。如果地理编码成功,您将获得一个地标数组。如果没有,您会收到错误消息。
文档中的注释:

@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

关于iphone - iOS5 CLGeocoder,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10286398/

10-10 20:29