SO基本上所有内容都在标题中。我搜索了很多,但没有找到任何不需要互联网连接的正确解决方案。如果用户更改设置中的时间-我找不到自上次启动以来的实时时间。
我的游戏需要它,每小时都需要它,即使你不玩游戏,你也会得到一些硬币。
如果用户在设置中更改时间-这会影响NSDate()中的时间,用户可以用硬币作弊。
因此,在应用程序启动时将NSDate()
保存为用户默认值。下次应用程序出现在前台或再次启动时,获取当前NSDate并减去保存的日期。这将为您提供两个日期之间的秒数。用秒计算小时只需除以3600即可Duncan C刚刚编辑
编辑:
请注意,在Swift的较新版本中(从Swift 2开始?),大多数Foundation类都被定义为没有NS
前缀的原生Swift类。对于swift的较新版本,请将上面出现的所有NSDate
替换为Date
。
还要注意的是,在iOS≥7.0中,Calendar
有一些方法可以使这种计算更简洁、更容易。有一种新的方法dateComponents(_:from:to:)
,可以用你想要的任何单位来计算两个日期之间的差异。你可以用它来计算两个日期之间的秒数,比计算秒数更干净,正如我最初的回答中所概述的那样。日历方法也倾向于处理边界条件,如跨越夏令时、闰秒等。
考虑以下Swift 4/5游乐场代码:
import UIKit
let now = Date()
let randomSeconds = Double.random(in: 100000...3000000)
let later = now + randomSeconds
if let difference = Calendar.current.dateComponents([.second],
from: now,
to: later)
.second {
print(difference)
试试这个。
步骤1。当用户退出游戏时。使用当前时间设置NSUserDefault。
步骤2。当应用程序启动时,在您的appDelagate文件中获取此值。
步骤3。相应地计算和奖励硬币之间的差异。