iOS应用程序在模拟器中以后台模式工作,但不在设备中?

时间:2016-07-20 20:58:04

标签: ios iphone swift background-mode

我正在编写一个时间跟踪应用程序,它在模拟器中完美运行。我在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()
}

2 个答案:

答案 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的一部分)开始,这已得到解决。应该正确暂停后台应用,以便更好地匹配设备行为。

相关问题