【问题标题】:get notification on timezone change in iOS在 iOS 中获取有关时区更改的通知
【发布时间】:2013-04-27 12:36:06
【问题描述】:

我的应用程序可以在设备时区更改时收到任何通知吗?我想在我的应用程序处于前台时收到通知。 NSTimezone 对我不起作用,因为我必须不断检查时区。

【问题讨论】:

标签: iphone ios objective-c ipad ios5


【解决方案1】:

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

文档中列出的示例是:

重大时间变化的示例包括午夜的到来、运营商的时间更新以及夏令时的变化

但我认为时区变化算作重大的时间变化。

文档还说,如果在您的应用处于后台时发生时间变化,您将在您转到前台时得到它

如果您的应用程序当前处于挂起状态,则此消息将排队等待您的应用程序返回到前台,此时它会被传递。

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

【讨论】:

  • 我注意到观察者方法是在应用程序置于前台而不是在应用程序处于后台并且用户更改时区或移动到不同时区时调用的。这是预期的行为吗?在 Android 上,即使应用程序在后台,此类广播也会发送到应用程序,但我意识到它们是两个不同的操作系统,具有非常不同的设计。
  • 刚刚注意到这里developer.apple.com/reference/uikit/uiapplicationdelegate/… 实际上是在前台传递的。我想现在我需要找到一种方法,如果我能在应用程序处于后台时弄清楚它。也许使用后台获取来实现它。
  • 您观察到的所有 iOS 通知都会排队,直到应用程序进入前台。如果您需要在应用程序处于后台时专门处理某些事情,您可以进行后台获取。您需要从 Apple 获得“授权”才能进行实际的后台处理。
【解决方案2】:

只要听 NSSystemTimeZoneDidChangeNotification.

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

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

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

【讨论】:

  • 我注意到观察者方法 timeZoneChanged here 在应用程序置于前台而不是在应用程序处于后台并且用户更改时区或移动到不同的时区。这是预期的行为吗?在 Android 上,即使应用程序在后台,此类广播也会发送到应用程序,但我意识到它们是两个不同的操作系统,具有非常不同的设计。
  • 应用程序恢复后您会收到该通知。
猜你喜欢
  • 2012-09-30
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2011-02-18
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多