我有一个适用于超时的应用程序(让我们说 - >>>在3天内 )。如果用户在离线时更改设备本地时间,则会出现问题,因为我比较两个NSDate (最终日期和今天)以检查超时。
所以我正在尝试通知 用户重大时间更改(几小时或几天),以便更新我的计时器,具体取决于之前的与更新之后的之间的差异。
我找到了 UIApplicationSignificantTimeChangeNotification ,它确实:
在时间发生重大变化时发布,例如,更改为新的一天(午夜),运营商时间更新以及更改为夏令时或从夏令时更改。
这几乎适合,但我无法弄清楚如何让#34;岁的"时间以获得差异。我不能依赖网络服务器,因为应用程序应该在离线模式下运行。
欢迎任何想法或建议;)
答案 0 :(得分:2)
我终于找到了一种方法来解决我的问题,使用 CPU时间(除了重启之外总是不断增加)。
第一次启动应用程序时,我获得了实时和CPU时间。
然后,当我需要检查时间是否已经改变时,我只需要
实时首先,我添加它(当前CPU时间 - 首先是CPU时间。)
这给了我正确的时间。
注意:注意使用真正的CPU时间,而不是计时器使用的时间,因为它会在设备进入睡眠状态时停止。
答案 1 :(得分:1)
当您的应用程序进入后台时,您应该存储设备的当前时间。当应用程序进入前台时,您应该获取设备的当前时间。现在衡量这两个日期之间的差异。如果它小于零,则表示用户已将设备设置为上一个日期,您应该抛出超时错误。如果差值大于0,则应将当前时间与实际完成日期进行比较。
另一种间接方式是启动设备的位置跟踪。即使应用程序进入后台,也要保持打开状态。当您的didUpdateLocation委托将被系统命中时,您将在参数中收到CLLocation对象。此位置对象具有currentTime详细信息。比较上次位置和当前位置的时间。如果是否定的,则用户随着时间虚张声势。是时候采取行动了。