2013-07-25 8 views
6

Ich kann verwirren, wie Region Überwachung funktioniert, aber das ist, was ich bis jetzt habe:Wie weiß iOS, welcher Standortmanager-Delegat die Regionsüberwachung aufrufen soll, während die App nicht ausgeführt wird?

Ich registriere eine Region zu überwachen durch meine Standort-Manager, der in einer Singleton-Klasse implementiert ist, wird dieser Singleton auch als festgelegt der Delegat des Standortmanagers, so dass die implementierte Methode aufgerufen wird.

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 

Dies funktioniert vollständig wie erwartet, wenn die App aktiv ist oder die Methode aufgerufen wird. Es macht auch Sinn, weil die Klasse bereits geladen wurde und wenn die Region ein Ereignis eintritt, sendet iOS dies sogar an meine App, die den Location Manager anruft, der sich registriert (wahrscheinlich hat er einen Verweis darauf) und wiederum ruft, was auch immer Delegierter war registriert entlang (seit der Klasse ist da bereit und geladen).

Das Problem ist, was passiert, wenn die App getötet wurde? Wird es zuerst in den Hintergrund gestellt? Wie weiß iOS, welche Delegatmethode aufgerufen werden soll und ob diese bereits geladen wurde?

Antwort

7

Wenn Ihre App beendet wurde und für eine Standortaktualisierung gestartet wurde, kann noch kein Standortmanager-Delegat vorhanden sein, und daher werden keine Benachrichtigungen an diesen Delegaten gesendet. Das System kann nicht wissen, welche Ihrer Klassen als Standortverwaltungsdelegat verwendet oder wie diese instanziiert werden soll.

Stattdessen wird Ihr application:didFinishLaunchingWithOptions: wie üblich aufgerufen, aber UIApplicationLaunchOptionsLocationKey wird im Optionsverzeichnis festgelegt. Dadurch wird Ihrer App mitgeteilt, dass Sie einen Standortmanager instanziieren und seinen Stellvertreter festlegen müssen. Erst nachdem Sie dies getan haben, wird der Delegat mit den Regionsupdates aufgerufen.

+0

Also gibt es zwei verschiedene Flüsse richtig? 1 mit meiner App lebt und die andere ohne es. Übrigens sollte ich nach dem Empfang des Wörterbuchs mit dem Schlüssel beim Start der App diese spezifische Benachrichtigung behandeln? Oder wird der Standortmanager überwacht, wenn ich ihn sofort zur Verfügung stelle? (Ich spreche über die Benachrichtigung, die meine App gestartet hat) – Pochi

+0

Das ist richtig. In den meisten Fällen übergeben Sie den als Startoption angegebenen Standortwert an alle Änderungen an Standortänderungen in Ihrer App und starten möglicherweise auch die Überwachung von Standortänderungen in Ihrer App. Sie haben mit einem neuen Standort begonnen - machen Sie etwas mit diesem Standortwert und beginnen Sie mit der Überwachung von Standortänderungen. – quellish

Verwandte Themen