2009-05-18 6 views
2

Zuerst, sorry, wenn diese Frage dumm ist, aber ich bin ein totaler Neuling in ObjC. In meiner iPhone-Anwendung habe ich eine CLLocationManager-Implementierung in meinem einzigen ViewController, weil ich nur eine Ansicht habe. Nein, ich möchte mehr Views in meiner Anwendung und jede View benötigt die Positionsinformationen vom CLLocationmanager.Einige Architekturfragen zu CLLocation Manager und mehreren ViewControllern

Also, ich denke, ich muss die Implementierung von der ViewController in meine AppController verschieben, weil ich CLLocationManager nicht in jedem ViewController implementieren wollen, richtig?

Aber jetzt weiß ich wirklich nicht, wie die ViewCotrollers die Positionsinformationen bekommen werden? Ich dachte daran, eine Singleton-Klasse zu implementieren, in der ich die Informationen speicherte, und jeder VieController kann die Informationen von dort abrufen. Aber dafür muss ich einen Timer oder etwas ähnliches in den ViewControllern implementieren, damit sie jede Sekunde prüfen, ob neue Daten verfügbar sind. Das klingt nicht wirklich gut und beschissen.

Wie können die ViewControllers automatisch die neuen Positionsinformationen erhalten? Vielleicht brauche ich etwas wie einen Beobachter, aber vielleicht ist in Cocoa/ObjC etwas bereit? Ich denke, ich bin mit meiner Bewerbung in die falsche Richtung.

Vielen Dank für jede Hilfe

twickl

Antwort

4

Hier ein Vorschlag aus der Spitze von meinem Kopf, die als Ausgangspunkt nützlich sein könnten. Sie haben Recht damit, dass Sie keinen Code wiederholen möchten, um die Verbindung zum CLLocationManager in jedem ViewController einzurichten. Ich würde diesen Code jedoch nicht in Ihren AppController verschieben (ich nehme an, Sie meinen AppDelegate).

Ich würde eine generische ViewController-Unterklasse erstellen und es so etwas wie LocationAwareViewController nennen. LocationAwareViewController wäre verantwortlich für das Erstellen einer Verbindung zum CLLocationManager und die Anmeldung für Updates.

Ich würde den LocationAwareViewController als Delegate des CLCLocationManager einrichten. Der LocationAwareViewController würde dann einige oder alle CLLocationManagerDelegate-Methoden implementieren. Jetzt erhält dieser ViewController Updates, sobald neue Standortinformationen verfügbar sind. Sie sollten keine Polling-Timer einrichten müssen.

Jeder Ihrer speziellen ViewControllers wäre dann Unterklassen von LocationAwareViewController. Sie könnten auch die CLLocationManagerDelegate-Methoden überschreiben, um bestimmte Aktionen für die Views auszuführen, für die sie verantwortlich sind.

Ein Disclaimer: Ich hatte noch keine Gelegenheit, Core Location zu verwenden, daher basiert meine Erwartung, dass CLLocationManager nur auf der Dokumentation funktioniert. Es sieht ziemlich einfach aus, aber vielleicht kann jemand anderes aufgrund seiner Erfahrungen mehr Informationen anbieten.

Verwandte Themen