iOS 应用程序在模拟器中以后台模式运行但在设备中不运行?
iOS app works in background mode in simulator but not in device?
我正在编写一个时间跟踪应用程序,它在模拟器中完美运行。我在 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()
}
在这种情况下,我看不出有任何理由使用后台模式。我建议您以其他方式将 quitDate 保存到 userDefaults、plist 文件或核心数据。这样,应用程序进入后台后发生什么都没有关系,也没有关系多长时间。您在唤醒时从持久数据中检索退出日期并按预期进行。
iOS 8.0 和 11.0 Beta 2 之间的 Simualtor 运行时无法暂停后台任务。从 iOS 11.0 Beta 3 模拟器(它是 Xcode 9.0 Beta 3 的一部分)开始,这个问题已经得到解决。应适当暂停后台应用,以更好地匹配设备行为。
我正在编写一个时间跟踪应用程序,它在模拟器中完美运行。我在 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()
}
在这种情况下,我看不出有任何理由使用后台模式。我建议您以其他方式将 quitDate 保存到 userDefaults、plist 文件或核心数据。这样,应用程序进入后台后发生什么都没有关系,也没有关系多长时间。您在唤醒时从持久数据中检索退出日期并按预期进行。
iOS 8.0 和 11.0 Beta 2 之间的 Simualtor 运行时无法暂停后台任务。从 iOS 11.0 Beta 3 模拟器(它是 Xcode 9.0 Beta 3 的一部分)开始,这个问题已经得到解决。应适当暂停后台应用,以更好地匹配设备行为。