Meine Objective C-App auf iOS 7 ruft Standortaktualisierungen im Hintergrund entweder von den startUpdatingsignificantLocationChanges- oder vom startUpdatingLocation-Delegaten ab (je nachdem, in welchem Modus sich die App befindet, aber das ist nicht wichtig).
Im Delegat sammle ich die Standortinformationen, schreibe sie in ein Wörterbuch und schreibe das Wörterbuch dann in eine Firebase.
%Vor%Manchmal funktioniert es, manchmal nicht (dh im selben Lauf der App wird manchmal der Speicherort wie erwartet in den Firebase geschrieben und manchmal nicht. Es gibt keinen offensichtlichen Reim oder Grund wenn es scheint zu funktionieren und wenn es nicht funktioniert).
Ich vermute, dass das Problem darin besteht, dass der Firebase-Schreibvorgang im Hintergrundmodus nicht erfolgreich abgeschlossen wird, aber ich bin mir nicht sicher. Ich bin sehr neu in iOS und Objective C und Firebase.
Meine App ist in ihren Fähigkeiten als Hintergrunddienste für Standortaktualisierungen und Hintergrundabruf markiert (Letzteres ist mein zufälliger Versuch, dieses Problem zu beheben, das frühere weiß ich, dass ich es brauche).
Mein Verdacht ist, dass ich dem Betriebssystem sagen muss, dass ich Zeit brauche, um den Schreibvorgang mit einer backkgroundTask abzuschließen und dann die Hintergrundaufgabe im Abschlussblock des Firebase-Schreibvorgangs zu beenden - hat jemand verifiziert, dass das beim Einlaufen funktioniert Hintergrundmodus?
Wenn ja, muss ich das nur im zweiten Schreibvorgang tun (vorausgesetzt, dass sie in der richtigen Reihenfolge abgeschlossen sind) oder in beiden (mit einem Zähler, den ich bei jedem Schreibvorgang herunterzählen)?
Alle Hinweise, die am meisten geschätzt werden.
Ja, Sie müssen Ihre Aufgabe im Hintergrund beenden. Es sagt so in der Apple Dokumentation :
Wenn sich Ihre Anwendung mitten in einer Aufgabe befindet und etwas mehr Zeit benötigt, um diese Aufgabe abzuschließen, kann sie die beginBackgroundTaskWithName: exspirationHandler: oder beginBackgroundTaskWithExpirationHandler: Methode des UIApplication-Objekts aufrufen, um zusätzliche Ausführungszeit anzufordern. Wenn Sie eine dieser Methoden aufrufen, wird die vorübergehende Aussetzung Ihrer App verzögert, sodass Sie ein wenig mehr Zeit haben, um die Arbeit zu beenden. Nach Abschluss dieser Arbeit muss Ihre App die endBackgroundTask: -Methode aufrufen, um dem System mitzuteilen, dass es beendet ist und ausgesetzt werden kann.
Fügen Sie Ihren Code einfach in eine Hintergrundaufgabe ein, geben Sie ihm maximale Zeit (3 Minuten, glaube ich).
Lesen Sie den Apple App Lifecycle und alles, was Sie tun sollten Bereite dich für zukünftige Referenz auf.
Tags und Links objective-c ios firebase background-process ios7