2016-03-25 7 views
0

ich ein GPS-Logging-Funktion in meiner Anwendung haben. Es gibt einige Optionen, die für diese Funktion auf der Seite "Einstellungen" meiner Apps konfiguriert werden können. Diese Funktion hängt jedoch davon ab, ob die Standortdienste aktiviert sind (auf dem eigentlichen iPhone selbst). Also habe ich für die konfigurierbaren Optionen locationServicesEnabled() überprüft, und wenn false, deaktiviere die Möglichkeit, die Optionen zu setzen."Listening" für CLLocationManager.locationServicesEnabled() Ändern

Wenn ich jedoch den Text unter den Optionen sehe, die ich hinzugefügt habe, "Standortdienste müssen aktiviert sein", wird der Benutzer höchstwahrscheinlich auf die Home-Schaltfläche klicken, zu iPhone-Einstellungen wechseln, Standortdienste aktivieren und dann zur App zurückkehren Konfigurieren Sie die Einstellungen. Da ich jedoch die aktivierten/deaktivierten Optionen in viewDidAppear() geändert habe, müssen sie die aktuelle Ansicht verlassen und zurückgehen, damit die Optionen aktiviert werden.

So (in Swift vorzugsweise), gibt es eine einfache Möglichkeit für eine Änderung auf der locationServicesEnabled() zu hören, und wenn ja, führen Sie eine Funktion, die in diesem Fall die konfigurierbaren Optionen in meiner App wieder aktivieren würde . Vielen Dank!

EDIT: So sieht es aus, wie ich für CLLocationManagerDelegate, didChangeAuthorizationStatus die delegierte Methode zu verwenden, möglicherweise in der Lage. Wäre das der richtige Weg?

Antwort

2

Sie sollten eine Instanz der Lage Manager erstellen und sich selbst als es der Stellvertretung einrichten.

Sie sollten die didChangeAuthorizationStatus Delegatmethode dann implementieren. Es wird aufgerufen, wenn der Benutzer Ihre App für Standortdienste autorisiert.

Sie können entweder in jedem View-Controller eine Instanz des Location-Managers erstellen, die über diese Änderung informiert sein muss, oder eine eigene Klasse erstellen, die eine Instanz des Location-Managers verwaltet (ein "Location Manager Manager")). Ich würde diese Klasse zu einem Singleton machen. Dann können Sie eine benutzerdefinierte Benachrichtigung senden, wenn sich der Standortmanager ändert.

Ich würde empfehlen, einen Singleton zu schaffen, die eine einzelne Instanz der Verwaltungseinrichtung hält und verwaltet. Das mache ich normalerweise.

+0

Awesome, thanks! Das klingt, als würde es dann funktionieren. –