2016-07-20 9 views
1

Ich schreibe eine Zeiterfassung App und es funktioniert perfekt im Simulator. Ich drücke um 9:00 Uhr, sperre den Bildschirm, komme um 9:05 zurück und der Timer wird auf 5 Minuten eingestellt. Auf meinem eigentlichen Gerät passiert jedoch nichts im Hintergrund. Was verursacht das?
Hier ist mein Code für den Hintergrundmodus. Ich habe auch den Hintergrundmodus in den Zielfunktionen aktiviert.iOS App funktioniert im Hintergrundmodus im Simulator, aber nicht im Gerät?

Suchen Sie im Hintergrundmodus nach dem Datum, um zu berechnen, wie lange es im Hintergrund war.

Sobald aus dem Hintergrund geladen, berechnen Sie, wie lange es im Hintergrund war und zeigen Sie das an.

func appLoadedFromBackground() { 
    if isActivityPaused == false { 
     let passedSecondsTillInactive = 
    NSDate().timeIntervalSinceDate(quitDate!) 
     passedSeconds += Int(passedSecondsTillInactive) 
    } 
    } 

In die Historie speichern. Es funktioniert nicht im Simulator, wenn ich startDate = nil und choosenActivity = nil ausschließe.

func saveActivityToHistory() { 
    CoreDataHandler.sharedInstance.saveHistory(choosenActivity!.name!, 
startDate: startDate!, endDate: NSDate(), duration: passedSeconds) 
    startDate = nil 
    choosenActivity = nil 
    passedSeconds = 0 
    loadCoreDataEntities() 
} 

Antwort

1

iOS-Simutator-Laufzeiten zwischen 8.0 und 11.0 Beta 2 konnten keine Aufgaben im Hintergrund stoppen. Ab iOS 11.0 Beta 3 Simulator (Teil von Xcode 9.0 Beta 3) wurde dies behoben. Apps mit Hintergrundinformationen sollten ordnungsgemäß angehalten werden, um das Geräteverhalten besser abzustimmen.

1

Ich sehe keinen Grund für den Hintergrundmodus in diesem Fall. Ich schlage vor, Sie halten quitDate auf andere Weise, auf Benutzerdefaults, eine PLIST-Datei oder Kerndaten. Auf diese Weise ist es egal, was passiert, wenn die App in den Hintergrund geht, noch spielt es eine Rolle, wie lange. Sie rufen das Beendigungsdatum aus den permanenten Daten für die Wake ab und fahren wie vorgesehen fort.

+0

Das ist schon was ich mache. Nach dem Beenden der App dauert es die Zeit des Ausgangs. Nach der Eingabe berechnet es die Zeit, die es im Hintergrund war und aktualisiert das Etikett. Mein Hauptanliegen ist, warum es auf meinem Gerät nicht funktioniert, obwohl es auf dem Simulator funktioniert. Ich habe den Hintergrundmodus hinzugefügt, weil ich ihn als Lösung für eine ähnliche Frage gesehen habe, aber im Hintergrundmodus passiert nichts. – Sammy

+0

Ich vermute, dass Sie die Hintergrundzeit in und iVar (quitDate) speichern. Diese Variable bleibt nicht bestehen, sobald die App beendet wurde. Mein Vorschlag war, den Wert von quitDate auf andere Weise zu erhalten. Speichern in Core Data oder NSUserDefaults standardUserdefaults. –