2013-05-03 64 views
10

设备时区更改时,我的应用程序是否可以收到任何通知?我想在我的应用程序处于前台时收到通知。 NSTimezone不适合我,因为我必须不断检查时区。在iOS的时区更改中获得通知

+0

检查这个https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSTimeZone_Class/Reference/Reference.html – 2013-05-03 07:07:48

+0

检查这个http://stackoverflow.com/questions/13741585/notify-app-when-ipad-date-time-settings-changed – 2013-05-03 07:10:21

回答

21

UIApplicationDelegate有一个名为applicationSignificantTimeChange:的方法,当时间有重大变化时被调用。

的文档中列出的实施例是:

的显著时间的变化的例子包括午夜的到来,通过载体中的时间更新,并且变化到日光节约时间

但我会假设时区更改算作一个重大的时间更改。

该文档也说,如果时间变化发生在你的应用程序在后台运行,你会得到它,当你去到前台

如果您的应用程序目前已被暂停,该消息被排队,直到你应用程序将返回到前台,并在此时交付。

您还可以收听UIApplicationSignificantTimeChangeNotification以发布信息,以在您的应用的其他任何位置获取相同的信息。

+0

我注意到当应用程序放在前台并且不在应用程序处于后台的持续时间时调用观察者方法并且用户更改时区或移动到不同的时区。这是预期的行为?在Android上,这样的广播发送到应用程序,即使应用程序在后台,但我知道他们是两个不同的操作系统具有非常不同的设计。 – 2016-11-25 10:42:55

+0

刚刚注意到这里https://developer.apple.com/reference/uikit/uiapplicationdelegate/1622992-applications重要时间交换,它实际上是在前台时交付的。我想现在我需要找到一种方法,如果我能在应用程序处于后台时弄清楚它。也许使用后台获取来实现它。 – 2016-11-25 13:31:18

+0

您观察到的所有iOS通知都会排队,直到应用程序进入前台。如果您需要在应用程序处于后台时专门处理某些内容,则可以执行后台提取。您需要从Apple获得“授权”才能进行实际的后台处理。 – leanne 2017-03-18 15:46:21

10

只听 NSSystemTimeZoneDidChangeNotification

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

并记住取消注册,例如在dealloc方法中。

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

我注意到,当应用程序放在前台并且不是应用程序在后台并且用户更改时区或移动到其他时区时,应用程序调用观察者方法'timeZoneChanged here'。这是预期的行为?在Android上,这样的广播发送到应用程序,即使应用程序在后台,但我知道他们是两个不同的操作系统具有非常不同的设计。 – 2016-11-25 10:42:33

+0

一旦应用程序恢复,您会收到该通知。 – 2016-11-30 15:33:15