簡體   English   中英

iOS5 CLGeocoder

[英]iOS5 CLGeocoder

我正在為IOS5開發一款iPhone應用程序。 我目前正在使用位於CoreLocation框架內的CLGeocoder類。 在地理編碼發生或同時發生后,我無法弄清楚最后是否調用了完成處理程序塊。

我只知道完成處理程序塊是在主線程上運行的。 有沒有人知道完成處理程序塊是在地理編碼完成時運行還是在地理編碼器在另一個線程上執行時完成手頭任務的代碼?

在地理編碼器完成地理編碼后運行完成處理程序。 換句話說,它在完成地理編碼任務時運行。 當地理編碼器運行時,它不是為了完成其他任務。

完成處理程序包含地標和錯誤。 如果地理編碼成功,您將獲得一個地標數組。 如果沒有,則會出錯。

來自文檔的說明:

此方法異步將指定的位置數據提交給地理編碼服務器並返回。 您的完成處理程序塊將在主線程上執行。 在發起前向地理編碼請求后,請勿嘗試啟動另一個前向或反向地理編碼請求。

地理編碼請求對每個應用程序都是速率限制的,因此在短時間內發出過多請求可能會導致某些請求失敗。 超過最大速率時,地理編碼器會將值為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文檔說:此方法異步將指定的位置數據提交給地理編碼服務器並返回。 您的完成處理程序塊將在主線程上執行。 在發起前向地理編碼請求后,請勿嘗試啟動另一個前向或反向地理編碼請求。

無需使用GCD在IBOulet上分發更新。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM