私は時間を追跡するアプリケーションを書いており、シミュレータでは完全に機能します。私は9時にスタートを押し、画面をロックし、9時05分に戻って、タイマーは5分に調整されます。しかし、私の実際のデバイスでは、バックグラウンドで何も起こりません。これは何の原因ですか?
これは私のバックグラウンドモードのコードです。私はまた、ターゲット機能でバックグラウンドモードをチェックしました。iOSアプリはシミュレータでバックグラウンドモードで動作しますが、デバイスでは動作しません。
バックグラウンドモードに入るとき、バックグラウンドでの経過時間を計算する日付を見つけます。
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()
}
これはすでに私がやっていることです。アプリを終了すると、終了の時間がかかります。入力すると、バックグラウンドにあった時刻が計算され、ラベルが更新されます。私の主な関心事は、それがシミュレータ上で動作しているにもかかわらず私のデバイス上で動作していない理由です。私はそれを似たような質問の解決策として見たが、バックグラウンドモードを追加したが、バックグラウンドモードでは何も起こらなかった。 – Sammy
私はあなたとiVar(quitDate)に背景を格納していると思います。この変数は、アプリケーションが終了すると永続化されません。私の提案は、quitDateの価値を他の方法で維持することでした。コアデータまたはNSUserDefaults標準のデフォルトに保存します。 –