2011-11-15 23 views
7

Sto codificando un'app per iPad e devo cambiare un grafico quando il giorno cambia a domenica.Come gestire gli eventi temporali su iOS?

La mia soluzione semplice è controllare il giorno nei metodi - (void)applicationDidBecomeActive:(UIApplication *)application o -(void)viewWillAppear:(BOOL)animated e impostare un timer come ogni 10 minuti per verificare se il giorno è cambiato a Domenica mentre l'app è attiva.

C'è un altro, forse più efficiente, modo di gestire questo?

risposta

13

Nel vostro delegato Appliciation, implementare il seguente metodo: -(void)applicationSignificantTimeChange:(UIApplication *)application

Questo metodo viene chiamato quando il giorno cambia, o se il tempo del dispositivo è stato modificato in background per qualsiasi ragione (come le modifiche al fuso orario).

1

C'è una notifica per quando il giorno cambia. Potresti ascoltarlo e controllare se è domenica quando spara.

Si dovrebbe anche verificare se è domenica al momento del lancio.

+0

Sapete come si chiama quella notifica, non la trovo da nessuna parte ... – Ecarrion

1

Cosa c'è di sbagliato in questa soluzione? Diventa domenica più frequentemente di una volta ogni 10 minuti in alcuni posti?

Una cosa che dovresti prendere in considerazione: nel tuo metodo di fuoco timer, se il tempo è dopo le 23:50, quindi riprogrammare il timer per prima (cioè intorno alle 00:00) in modo da avere più probabilità di catturare con precisione la mezzanotte.

+1

Non mi piace l'idea di avere un timer che richiede la data ogni tanto, mi sento un po 'sporco;) – Ecarrion

1

Questo capitolo potrebbe rivelarsi utile, utilizzando qualche tipo di notifica per aggiornare:

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

Anche se mi finito con la stessa soluzione che si sta utilizzando, è solo più facile e più affidabile trovo.

+0

Perché pensi sia più affidabile? – Ecarrion

+0

Sembra che ci siano problemi quando il dispositivo entra nel sonno profondo. Penso che potrebbe essere necessario registrarsi per le notifiche remote per farlo funzionare correttamente ... strano che Apple non sembra avere una soluzione adeguata per questo, Android ha un grande supporto per questo genere di cose. –

4

Un'altra opzione sarebbe quella di utilizzare gli stessi due metodi che hai menzionato, "viewWillAppear:" e "applicationDidBecomeActive:" e invece di impostare un timer per ogni 10 minuti, basta calcolare la quantità di tempo tra l'ora corrente e quella successiva Domenica. Prendi quell'intervallo di tempo e usalo per impostare un timer che scatterà esattamente a mezzanotte di domenica.

Problemi correlati