【问题标题】:iOS5 CLGeocoderiOS5 CLGeocoder
【发布时间】:2012-04-23 18:47:42
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios ios5 objective-c-blocks clgeocoder


    【解决方案1】:

    完成处理程序在地理编码器完成地理编码后运行。换句话说,它在地理编码任务完成后运行。它不是为了在地理编码器运行时完成一些其他任务。

    完成处理程序包含地标和错误。如果地理编码成功,您将获得一个地标数组。如果没有,你会得到一个错误。

    来自文档的注释:

    该方法将指定的位置数据异步提交给地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,请勿尝试发起另一个正向或反向地理编码请求。

    每个应用的地理编码请求都有速率限制,因此在短时间内发出过多请求可能会导致某些请求失败。当超过最大速率时,地理编码器会将值为 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
    

    【讨论】:

    • Apple 文档有另一个注释:«您的完成处理程序块将在主线程上执行。»
    • @nevanking 是 dispatch_async(dispatch_get_main_queue() 必要的吗?从文档中它说完成块将在主线程上执行。
    【解决方案2】:

    Apple 文档说: 该方法将指定的位置数据异步提交给地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,请勿尝试发起另一个正向或反向地理编码请求。

    无需使用 GCD 在 IBOulet 上调度更新。

    http://developer.apple.com/library/ios/#DOCUMENTATION/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多