Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 仅在手动更改设备时间时检测设备时间更改_Iphone_Ios_Objective C_Datetime - Fatal编程技术网

Iphone 仅在手动更改设备时间时检测设备时间更改

Iphone 仅在手动更改设备时间时检测设备时间更改,iphone,ios,objective-c,datetime,Iphone,Ios,Objective C,Datetime,问题:我知道检测手动时间更改的方法ApplicationsSignificantTimeChange。但方法文档中说: 重大时间变化的示例包括午夜的到来、承运人对时间的更新以及夏时制的变更。委托可以实现此方法来调整显示时间或对时间变化敏感的应用程序的任何对象 因此,它不仅检测到手动时间变化,还检测到午夜的到来。在我的应用程序中,这将产生一个问题,因为用户将看到一个alertbox: 你必须改变时间。请恢复到实际时间 即使他在午夜后恢复应用程序(或者可能是他最小化应用程序并进入睡眠状态。第二天他醒

问题:我知道检测手动时间更改的方法
ApplicationsSignificantTimeChange
。但方法文档中说:

重大时间变化的示例包括午夜的到来、承运人对时间的更新以及夏时制的变更。委托可以实现此方法来调整显示时间或对时间变化敏感的应用程序的任何对象

因此,它不仅检测到手动时间变化,还检测到午夜的到来。在我的应用程序中,这将产生一个问题,因为用户将看到一个alertbox:

你必须改变时间。请恢复到实际时间

即使他在午夜后恢复应用程序(或者可能是他最小化应用程序并进入睡眠状态。第二天他醒来,恢复应用程序并意外地收到时间更改通知)

问题:
如何仅在手动更改时间而非午夜到达时显示警报?

只需使用
NSSystemClockDidChangeNotification

最好在服务器运行时检查这些内容

遵循以下步骤

  • 获取服务器时间并转换为当前区域设置

  • 使用当前区域设置检查移动时间

  • 如果它们不相同,则表示用户更改了时间


  • 让我知道这是否清楚。

    我使用远程服务器时间检查的一种变体已有一年或几年了。它在iOS上运行得很好

  • 获取远程时间

  • 在时间检查类中,存储远程时间和设备时间之间的偏移量,并将其存储在简单的NSTimeInterval变量中

  • 现在,您可以随时从时间检查类获取“实时”,因为它可以获取当前设备时间,只需添加存储的偏移量,您就可以一直获得实时

  • 无论何时打开应用程序背景,您都需要删除存储的偏移量,因为用户可以随意更改时间设置

  • 对于每个应用程序前台事件,您必须执行3次。再一次。再去遥控一次。拒绝任何实时调用,直到您再次获得该偏移量。任何依赖于现有实时性的调用都必须在尚未获取实时性的事件中正常失败

  • 现在,您得到的偏移量应该/可以与您上次得到的偏移量进行比较。确定一个阈值,比如15秒。如果与上次的偏移量更改超过该阈值,则用户可能手动更改时间。这对我来说是一件有益的事情。当然,即使用户可以更改设备时间,我也会随时准备好实时(大部分时间)


  • 阿福,我总是使用UTC时间戳来避免任何区域设置问题。

    谁/什么人在执行“手动时间更改”,您希望提醒用户?如果您可以使用ApplicationsSignificantTimeChange获得所需的结果,则除非应用程序处于打开或半打开/最小化状态,否则您的警报不会出现,但从阅读该描述中,我看不到它声明它检测到一个用户在改变时间……尽管它可以。我知道一个非常流行的名为CSR Racing的应用程序存在作弊问题,因为用户更改了您获得奖金的时间,这需要一个月的时间。如果我需要保护,我的方法是从我的应用程序启动开始与外部源/Web服务器时间进行检查,并与用户时间进行比较,然后进行比较。例如,用户最小化应用程序,然后从设置更改时间。之后,如果用户打开/恢复应用程序,他将通过applicationSignificantTimeChange方法收到通知。但如果他不改变时间,但午夜来临的话,他也会得到。我想避免这种情况。如何调用该方法,我尝试在
    [UIApplicatin sharedApplication]
    中调用它,但它没有定义。我该怎么称呼它,还是代表?