2013-05-03 4 views
10

la mia applicazione può ricevere notifiche in caso di modifica del fuso orario del dispositivo? Voglio ricevere una notifica quando la mia applicazione è in primo piano. NSTimezone non ha funzionato per me poiché devo controllare continuamente il fuso orario.ricevere notifiche sulla modifica del fuso orario in iOS

+0

controllo questo https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSTimeZone_Class/Reference/Reference.html –

+0

verifica questo http://stackoverflow.com/questions/13741585/notify-app-when-ipad-date-time-settings-changed –

risposta

21

UIApplicationDelegate ha un metodo chiamato applicationSignificantTimeChange: che viene chiamato quando c'è un cambiamento significativo nel tempo.

Gli esempi elencati nella documentazione sono:

Esempi di significativi cambiamenti di tempo includono l'arrivo della mezzanotte, un aggiornamento del tempo da un vettore, e il passaggio all'ora legale

Ma suppongo che i cambiamenti del fuso orario contino come un cambiamento di orario significativo.

I documenti dicono anche che se il cambio di orario succede quando la vostra applicazione è in background si ottiene quando si va al primo piano

Se l'applicazione è attualmente sospesa, questo messaggio è in coda fino a quando il l'applicazione ritorna in primo piano, a quel punto viene consegnata.

È anche possibile ascoltare UIApplicationSignificantTimeChangeNotification da pubblicare per ottenere le stesse informazioni in qualsiasi altro punto della propria app.

+0

Ho notato che il metodo observer è invocato quando l'app è messa in primo piano e NON e non nella durata quando l'app è in background e l'utente cambia il fuso orario o si sposta in un fuso orario diverso. È questo il comportamento previsto? Su Android, tali trasmissioni vengono inviate all'app anche se l'app è in background, ma mi rendo conto che si tratta di due sistemi operativi diversi con un design molto diverso. –

+0

Appena notato qui https://developer.apple.com/reference/uikit/uiapplicationdelegate/1622992-applicationsignificanttimechange che viene effettivamente consegnato quando è in primo piano. Immagino che ora ho bisogno di trovare un modo se riesco a capirlo mentre l'app è in background. Forse usare il recupero dello sfondo per realizzarlo. –

+0

Tutte le notifiche iOS che si osservano vengono accodate fino a quando l'app non viene visualizzata in primo piano. Se devi gestire qualcosa in particolare mentre l'app è in background, puoi eseguire il recupero in background. Dovrai ottenere un "diritto" da parte di Apple per eseguire l'elaborazione in background. – leanne

10

Basta ascoltare NSSystemTimeZoneDidChangeNotification.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(timeZoneChanged) name: NSSystemTimeZoneDidChangeNotification object:nil]; 

E ricordarsi di annullare la registrazione, ad esempio nel metodo dealloc.

[[NSNotificationCenter defaultCenter] removeObserver:self name:NSSystemTimeZoneDidChangeNotification object:nil]; 
+0

Ho notato che il metodo observer "timeZoneChanged here" è invocato quando l'app è messa in primo piano e NON e non nella durata quando l'app è in background e l'utente cambia il fuso orario o si sposta in un fuso orario diverso. È questo il comportamento previsto? Su Android, tali trasmissioni vengono inviate all'app anche se l'app è in background, ma mi rendo conto che si tratta di due sistemi operativi diversi con un design molto diverso. –

+0

Ricevi questa notifica una volta ripristinata l'app. –