iOS时间更改通知和上一次

我有一个应用程序与超时工作 (让我们说 – >环3天 )。 如果用户在离线状态下 更改设备本地时间 ,则会出现问题,因为我正在比较两个NSDate (最终date和今天)来检查超时。

所以我试图得到通知 ,用户作出了重大的时间变化 (几个小时或几天),以更新我的计时器取决于更新之前之后的差异

我发现了UIApplicationSignificantTimeChangeNotification ,它会这样做

当时间发生重大变化时发布,例如更改为新的一天(午夜),更新运营商时间以及更改为夏令时或从夏令时更改。

这几乎适合,但我不知道如何得到“旧”的时间,以获得差异。 我不能依靠Web服务器,因为应用程序应该在离线模式下运行。

任何想法或build议,欢迎;)

我终于find一种方法来解决我的问题,通过使用CPU时间 (除了重新启动 ,它总是不断增加)。

第一次启动应用程序,我得到实时和CPU时间。

那么,当我需要检查时间是否已经改变,我只是采取

最初的实时 ,我加上( 当前的CPU时间 – 最初的CPU时间)。

这给了我正确的时间。

注意:注意使用真正的CPU时间,而不是定时器使用的时间,因为当设备进入睡眠状态时它会停止。

应用程序进入后台时,应该存储设备的当前时间。 当应用程序进入前台时,您应该获取设备的当前时间。 现在测量这两个date之间的差异。 如果小于零,则意味着用户已经将设备设置为以前的date,并且应该抛出超时错误。 如果差值大于0,则应将当前时间与实际完成date进行比较。

另外一个间接的方法是开始设备的位置跟踪。 即使应用程序进入后台,仍然保持开启状态。 当您的didUpdateLocation委托将按系统命中时,您将在参数中接收CLLocation对象。 该位置对象具有currentTime细节。 比较上次位置和当前位置的时间。 如果是负面的,用户会随着时间的stream逝而虚张声势。 是时候采取行动了。