2016-07-20 8 views
1

私は時間を追跡するアプリケーションを書いており、シミュレータでは完全に機能します。私は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() 
} 

答えて

1

iOS Simualtorランタイムが8.0から11.0の間、ベータ2はバックグラウンド処理されたタスクを中断できませんでした。 iOS 11.0 Beta 3 Simulator(Xcode 9.0 Beta 3の一部)の時点で、この問題が修正されました。バックグラウンド処理されているアプリは、デバイスの動作に合わせて適切に停止する必要があります。

1

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

+0

これはすでに私がやっていることです。アプリを終了すると、終了の時間がかかります。入力すると、バックグラウンドにあった時刻が計算され、ラベルが更新されます。私の主な関心事は、それがシミュレータ上で動作しているにもかかわらず私のデバイス上で動作していない理由です。私はそれを似たような質問の解決策として見たが、バックグラウンドモードを追加したが、バックグラウンドモードでは何も起こらなかった。 – Sammy

+0

私はあなたとiVar(quitDate)に背景を格納していると思います。この変数は、アプリケーションが終了すると永続化されません。私の提案は、quitDateの価値を他の方法で維持することでした。コアデータまたはNSUserDefaults標準のデフォルトに保存します。 –

関連する問題