2011-11-15 29 views
7

Estoy codificando una aplicación para iPad, y tengo que cambiar un gráfico cuando el día cambia al domingo.¿Cómo manejar eventos de tiempo en iOS?

Mi solución directa es verificar el día en los métodos - (void)applicationDidBecomeActive:(UIApplication *)application o -(void)viewWillAppear:(BOOL)animated, y configurar un temporizador como cada 10 minutos para verificar si el día ha cambiado a domingo mientras la aplicación está activa.

¿Hay alguna otra manera, quizás más eficiente, de manejar esto?

Respuesta

13

En su delegado appliciation, aplicar el siguiente método: -(void)applicationSignificantTimeChange:(UIApplication *)application

Este método es llamado cuando el día cambia, o si se ha cambiado la hora del dispositivo en el fondo por cualquier razón (tales como cambios en la zona horaria)

1

Hay una notificación de cuándo cambia el día. Podrías escucharlo y verificar si es domingo cuando se dispara.

También debe comprobar si es domingo en el momento del lanzamiento.

+0

¿Sabes cómo se llama esa notificación? No puedo encontrarla en ningún lado ... – Ecarrion

1

¿Qué pasa con esa solución? ¿Se convierte en domingo con más frecuencia que una vez cada 10 minutos en algunos lugares?

Una cosa que tal vez desee considerar: en su método de disparo con temporizador, si es la hora después de 23:50, vuelva a programar el temporizador antes (es decir, alrededor de las 00:00) para que pueda alcanzar la medianoche con precisión.

+1

Simplemente no me gusta la idea de tener un temporizador que pida la fecha cada cierto tiempo, me siento un poco sucio; -) – Ecarrion

1

Este capítulo podría resultar útil, el uso de algún tipo de notificación para actualizar:

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

Aunque yo mismo terminó con la misma solución que está utilizando, es simplemente más fácil y más fiable que encuentro.

+0

¿Por qué crees que es más confiable? – Ecarrion

+0

Parece que hay problemas cuando el dispositivo entra en sueño profundo. Creo que es posible que tengas que registrarte para recibir notificaciones remotas para que esto funcione correctamente ... Es extraño que Apple no parezca tener una solución adecuada para esto, Android tiene un gran soporte para este tipo de cosas. –

4

Otra opción sería utilizar los mismos dos métodos que mencionó, "viewWillAppear:" y "applicationDidBecomeActive:" y en lugar de establecer un temporizador cada 10 minutos, simplemente calcule la cantidad de tiempo entre la hora actual y la siguiente Domingo. Toma ese intervalo de tiempo y úsalo para establecer un temporizador que disparará exactamente a la medianoche del domingo.

Cuestiones relacionadas