【问题标题】:How do I use an NSTimer with the internal clock?如何将 NSTimer 与内部时钟一起使用?
【发布时间】:2016-02-18 15:43:50
【问题描述】:

我已尝试对此进行研究,但我一定是看错了地方或措辞不正确,但是,我的问题是:

如何将 NSTimer 功能与 iOS 系统的内部时钟一起使用?我想使用一个即使应用程序关闭也能正常工作的计时器。

例如:设置一个计时器以每秒增加 1 个分数。计时器运行 5 小时,用户关闭 iPhone 上的应用程序。我该如何做到,例如当用户在 6 小时内打开应用程序时,任务完成,或者如果他们在 2 小时内打开,计数器显示剩余 3 小时?

如果这不能在 Swift 2 中完成,而是服务器端任务或类似任务,我们非常感谢任何指导,因为我似乎无法弄清楚如何解决这个问题。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您错误地处理了这个问题。你不想要NSTimer 或类似的东西。也不需要在服务器端做任何事情(下面有一个警告)。

    当应用关闭时,记录正在运行的任务等,以及时间。当应用再次打开时,检查当前时间,并处理这些时间之间发生的任何变化,如果是每秒 1 点,计算过去的秒数并添加那么多点等。

    对服务器的警告:根据您的操作,您可能不希望用户能够作弊,即开始任务、关闭应用程序、将设备上的时间提前 5 小时并重新打开应用程序获得 5 小时的积分。可以使用服务器来防止这种事情。使用服务器检查实时,或将任务存储在其上等。

    【讨论】:

    • 感谢您的回复,我会考虑存储当前日期/时间并进行检查。
    【解决方案2】:

    应用关闭时您无法运行代码。

    但是您所要求的不需要运行任何代码。

    当您启动计时器时,将启动时间放入 NSUserDefaults 中(例如:但适当的存储会更好)。您可以在应用程序运行时正常运行计时器,并在应用程序终止时停止计时器。当应用再次启动或从后台返回时,您只需读取计时器开始日期,将其与当前时间进行比较并相应地重新启动计时器。

    【讨论】:

    • 感谢您的回复,我目前正在调查使用核心数据和/或 NSUserDefaults。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多