II每秒都会设置一个NSTimer。使用模拟器,通过按主页按钮导航离开应用程序后,这将正确调用eachSecond()方法。但是,在真正的iPhone 6上,一旦我离开,每个秒都不再被调用,直到应用程序再次打开。
为什么在真实设备上这会有不同的表现?反正是否确保它会在这个用例中每秒发射一次?
它是一款健身应用程序,因此需要在手机锁定或用户即时离开时记录持续时间。
谢谢,
lazy var timer = NSTimer()
fun init() {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(RunViewController.eachSecond(_:)), userInfo: nil, repeats: true)
}
func eachSecond() {
// update UI etc.
}
答案 0 :(得分:5)
暂停您的应用时,NSTimer
不会触发。在XCode下运行时后台执行不同;后台执行限制不适用。
为了确定暂停应用程序的时间,您可以在applicationDidEnterBackground
中存储时间戳,并根据{{1}中保存的时间戳和当前时间之间的差异计算已用时间}
答案 1 :(得分:0)
您需要将计时器添加到主运行循环中。
func init() {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(RunViewController.eachSecond(_:)), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
}