2013-10-18 21 views
8

Tôi đang cố gắng xác định tên thành phố theo cấu trúc CLLocation với yêu cầu phương thức ngược ... đối tượng CLGeocoder, nhưng tôi không biết cách đặt thời gian chờ? Nếu không có thời gian yêu cầu kết nối internet có thể mất khoảng 30 giây - quá dài ...CLGeocoder làm thế nào để thiết lập thời gian chờ?

Trả lời

2

Không có bất kỳ chức năng tích hợp nào để xử lý điều này mà tôi biết. Tôi đã bắt đầu sử dụng giải pháp sau. Xin lỗi trong Swift, tôi không nói thành thạo Objective-C.

này sẽ cung cấp cho bạn một thời gian chờ 2 giây

func myLookupFunction(location: CLLocation) 
{ 
    let timer = NSTimer(timeInterval: 2, target: self, selector: "timeout:", userInfo: nil, repeats: false); 
    geocoder.reverseGeocodeLocation(location){ 
     (placemarks, error) in 
     if(error != nil){ 
      //execute your error handling 
     } 
     else 
     { 
      //execute your happy path 
     } 
    } 
    NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode) 
} 

func timeout(timer: NSTimer) 
{ 
    if(self.geocoder.geocoding) 
    { 
     geocoder.cancelGeocode(); 
    } 
} 

Sau khi cháy thời gian chờ, gọi lại của bạn sẽ được thực thi và con đường lỗi với được gọi.

Bạn sẽ nhận được một lỗi với các chi tiết:

  • Mã = 10
  • Localized Mô tả (tiếng Anh) = Các hoạt động không thể hoàn tất. (kCLErrorDomain error 10.)

Hy vọng điều này sẽ hữu ích.

0

@ JTango18 câu trả lời trong Swift 3:

func myLookupFunction(location: CLLocation) 
{ 
    let timer = Timer(timeInterval: 2, target: self, selector: #selector(self.timeout), userInfo: nil, repeats: false); 
    geocoder.reverseGeocodeLocation(location){ 
     (placemarks, error) in 
     if(error != nil){ 
      //execute your error handling 
     } 
     else 
     { 
      //execute your happy path 
     } 
    } 
    RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode) 
} 

func timeout() 
{ 
    if (geocoder.isGeocoding){ 
     geocoder.cancelGeocode() 
    } 
} 
Các vấn đề liên quan