Problema con actualizaciones de location diferida ios

He estado intentando implementar actualizaciones de location diferida en una aplicación durante los últimos dos días. El problema que estoy enfrentando es que

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 

método se llama cada segundo incluso después de que llame al

  [self.locMgr allowDefernetworkingLocationUpdatesUntilTraveled:(CLLocationDistance)200 timeout:(NSTimeInterval)25]; 

método.

Aunque tengo que decir que

  - (void)locationManager:(CLLocationManager *)manager didFinishDefernetworkingUpdatesWithError:(NSError *)error 

se llama exactamente después de 25 segundos como lo especifica el método allowDefernetworkingLocationUpdatesUntilTraveled con el código de error = nulo.

Es mi entendimiento de los documentos que didUpdateLocations deberían llamarse después de solo 25 segundos. Cualquier ayuda sería muy apreciada.

He estado luchando con el mismo problema, y ​​es posible que haya encontrado una respuesta que resuelve este problema para muchos, al less resuelve mi problema y consigue que las actualizaciones aplazadas funcionen de manera consistente para mí. Seguí todos los pasos de la list anterior y, sin importar lo que hice, las actualizaciones de location no diferirían. Se me ocurrió que podría tener otras aplicaciones en ejecución que no permitieran que el sistema duerma, así que maté todas las demás aplicaciones en la bandeja de tareas múltiples. Ejecuté mi aplicación de muestra nuevamente y … ¡funcionó! Pero la historia no termina allí. Lo intenté de nuevo un poco más tarde, y aunque no había otras aplicaciones corriendo en la bandeja de tareas múltiples, no pude conseguir que los services de location diferieran. Entonces se me ocurrió que tengo una aplicación en mi teléfono llamada "Moves" que logra mantenerse con vida incluso después de que la matas manualmente. No estoy completamente seguro de cómo Moves vuelve mágicamente a la vida cuando lo matas, pero lo hace (tal vez usando bluetooth y el service de restauración / preservación de la aplicación). Aunque está vivo y rastrea tu location, no aparece en la bandeja de tareas múltiples. Creo que solo las aplicaciones que se inician manualmente aparecen en la bandeja: si el sistema operativo inicia una aplicación, no aparece en la bandeja. Pero divagué … Pude get services de location diferida para que funcionen de manera consistente en mi aplicación al rechazar Moves para usar los services de location. Cuando lo hice, Moves se quejó a pesar de que no estaba en la bandeja de tareas múltiples. Parece que si otra aplicación está utilizando services de location (y no aplazando), su aplicación no diferirá tampoco.

De acuerdo con los foros de desarrolladores de Apple para el SDK de iOS 6.0, las actualizaciones de location diferida solo están disponibles:

  • en el hardware del iPhone 5
  • ejecutando iOS 6.0 o superior
  • precisión deseada establecida en kCLLocationAccuracyBest
  • llamar al método "startUpdatingLocation"
  • espere a que las actualizaciones de location lleguen a aproximadamente 1 por segundo
  • luego comienza a aplazar las actualizaciones

Ver: https://devforums.apple.com/message/751974#751974

Por lo tanto, parece que necesita hardware de iPhone 5 y esperar que las actualizaciones de location entren en 1Hz.