2013-07-25 30 views
21

Tôi có một thanh tìm kiếm trong ứng dụng của mình mà người dùng có thể nhập một địa chỉ vào và nó sẽ đưa ra kết quả mã hóa địa lý. Kết quả cập nhật khi người dùng nhập, theo mã sau:kCLErrorDomain error 2 sau khi mã hóa địa lý nhiều lần với CLGeocoder

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    ... 
    if (self.geocoder.geocoding) [self.geocoder cancelGeocode]; 
    [self.geocoder geocodeAddressString:searchText completionHandler:^(NSArray *placemarks, NSError *error) { 
     if (error != nil) { 
      NSLog(@"ERROR during geocode: %@", error.description); 
      return; 
     } 
     //update the view 
    }]; 
} 

Điều này làm việc cho một vài ký tự đầu tiên người dùng nhập vào trường tìm kiếm. Tuy nhiên, sau khi sử dụng các loại nhiều ký tự lặp đi lặp lại, các geocoder bắt đầu đưa ra các lỗi sau (mà tôi biết có nghĩa là có một vấn đề với mạng):

ERROR during geocode: Error Domain=kCLErrorDomain Code=2 "The operation couldn’t be completed. (kCLErrorDomain error 2.)" 

Các geocoder không làm việc một lần nữa cho đến khi toàn bộ ViewController là tải lại. Tại sao điều này có thể xảy ra, và tôi có thể làm gì để giải quyết nó?

Trả lời

46

Tôi tin rằng lý do là như sau:
Trình mã hóa địa lý của Apple không trả lời mọi yêu cầu theo cùng một cách. Thay vào đó, các yêu cầu đầu tiên từ một thiết bị nhất định được trả lời nhanh chóng, nhưng nếu thiết bị đã gửi 100 yêu cầu trở lên, câu trả lời đến chậm hơn và chậm hơn hoặc các yêu cầu không được trả lời, điều này có thể gây ra lỗi của bạn.
Khi bạn tải lại trình điều khiển chế độ xem, việc này chỉ mất thời gian và máy chủ mã hóa địa lý sẵn sàng trả lời lại. Về cơ bản, bạn không thể làm bất cứ điều gì về nó, vì trình cắt địa lý muốn bảo vệ bản thân khỏi bị quá tải bởi các yêu cầu từ một thiết bị duy nhất. Bạn chỉ cần giới hạn số lượng yêu cầu mà bạn gửi ở đó.
BTW: docs nói "bạn không nên gửi nhiều hơn một yêu cầu mã hóa địa lý mỗi phút".

+0

Ồ vâng, tôi không nhận thấy dòng đó trong tài liệu. Làm cho cảm giác hoàn hảo. – jburns20

+1

Mong muốn chắc chắn có một thời gian ân hạn của một hoặc hai tuần trong khi phát triển: ( –

0

Tôi gặp sự cố này khi chọn vị trí cho ứng dụng Messenger. Giải pháp của tôi là giới thiệu độ trễ 3 giây, sau khi người dùng dừng panning bản đồ, trước khi gọi bộ mã hóa địa lý. Để đảm bảo rằng người dùng muốn chính xác vị trí đó.

Các vấn đề liên quan