CLGeocoder cómo configurar el time de espera?

Estoy tratando de definir el nombre de la ciudad por la estructura CLLocation con la request inversa … al object CLGeocoder , pero no sé cómo configurar el time de espera. Si no hay connection a Internet, el time de request puede demorar unos 30 segundos, es demasiado largo …

No hay ninguna funcionalidad incorporada para manejar esto que conozco. Comencé a usar la siguiente solución. Disculpa que está en Swift, no hablo fluidamente Objective-C.

Esto le dará un time de espera de 2 segundos.

 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(); } } 

Después de que el time de espera se dispare, se ejecutará su callback y se llamará a la ruta de error.

Obtendrá un error con los detalles:

  • Código = 10
  • Descripción localizada (inglés) = La operación no se pudo completar. (error kCLErrorDomain 10.)

Espero que esto ayude.

@ JTango18 respuesta en 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() } }