我正在编写一个时间跟踪应用程序,它在模拟器中完美运行。我在9:00按开始,锁定屏幕,在9:05返回,计时器调整为5分钟。但是,在我的实际设备上,后台没有任何反应。造成这种情况的原因是什么? 这是我的背景模式代码。我还在目标功能中检查了后台模式。
进入后台模式时,查找日期以计算背景中的时长。
func appGoesIntoBackground() {
if isActivityPaused == false {
quitDate = NSDate()
}
}
从背景加载后,计算它在背景中的显示时间并显示它。
func appLoadedFromBackground() {
if isActivityPaused == false {
let passedSecondsTillInactive =
NSDate().timeIntervalSinceDate(quitDate!)
passedSeconds += Int(passedSecondsTillInactive)
}
}
保存到历史记录。如果我切掉startDate = nil和choosenActivity = nil,它在模拟器中不起作用。
func saveActivityToHistory() {
CoreDataHandler.sharedInstance.saveHistory(choosenActivity!.name!,
startDate: startDate!, endDate: NSDate(), duration: passedSeconds)
startDate = nil
choosenActivity = nil
passedSeconds = 0
loadCoreDataEntities()
}
答案 0 :(得分:1)
在这种情况下,我没有看到任何背景模式的原因。我建议你坚持quitDate一些其他的方式,userDefaults,plist文件或核心数据。这样,应用程序转到后台后会发生什么并不重要,也不重要。您可以在唤醒时从持久数据中检索退出日期,然后按预期继续。
答案 1 :(得分:1)
iOS Simualtor 8.0和11.0 Beta 2之间的运行时无法暂停后台任务。从iOS 11.0 Beta 3 Simulator(它是Xcode 9.0 Beta 3的一部分)开始,这已得到解决。应该正确暂停后台应用,以便更好地匹配设备行为。