2

私は時間追跡アプリを書いていますが、シミュレーターで完全に動作します。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()
}
4

2 に答える 2

1

この場合、バックグラウンド モードの理由はわかりません。quitDate を別の方法で、userDefaults、plist ファイル、または Core Data に永続化することをお勧めします。この方法では、アプリがバックグラウンドになった後に何が起こるかは問題ではなく、どのくらいの時間も問題ではありません。ウェイク時に永続化されたデータから終了日を取得し、意図したとおりに続行します。

于 2016-07-20T22:32:07.007 に答える