2014-04-30 64 views
0

我遇到一個奇怪的問題- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;CLGeocoder只返回第一個查找結果

我有一個位置列表需要查找。所以,我不喜歡的東西

for (Trip *trip in takenTrips) { 
    [geoCoder geocodeAddressString:trip.location completionHandler:^(NSArray *placemarks, NSError *error) { 
     //handling result 
    }]; 
} 

但似乎完成處理纔會被調用一次。我試着按順序進行這些查找。然後一切正常。

我搜索了一會兒,但找不到類似的東西。我在這裏完全不知所措...

歡迎任何建議!

回答

0

應用程序應該意識到他們如何使用地理編碼。有效使用此類的經驗法則:爲任何一個用戶操作發送至多一個地理編碼請求。 class link

解決你的問題,你能下列之一:

  1. do-while循環,它檢查地址解析器正在處理地理編碼
  2. NSOperationQueue到如果excucute一下午時間就完成
  3. 在completeHandle執行回調,運行下一個地理編碼
+0

哦,我不知道這一點。我會順序地做。 – Selkie

0

爲什麼不使用更多地理編碼器

dispatch_queue_t geocoderQueue = dispatch_queue_create("geocoder.queue", DISPATCH_QUEUE_CONCURRENT); 
dispatch_apply([takenTrips count], dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ull), ^(size_t index) { 

    NSString *loc = [(Trip *)takenTrips[index] location]; 

    CLGeocoder *geoCoder = [CLGeocoder new]; 
    [geoCoder geocodeAddressString:loc completionHandler:^(NSArray *placemarks, NSError *error) { 
     CLPlacemark *placemark = [placemarks firstObject]; 
     NSLog(@"%@",placemark.postalCode); 
    }]; 
}); 

,並在私人併發隊列所以你可以在性能上一個偉大的結果。