Некоторые вопросы архитектуры о CLLocation Manager и нескольких ViewControllers - PullRequest
2 голосов
/ 18 мая 2009

Прежде всего, извините, если этот вопрос глуп, но я новичок в ObjC. В моем приложении для iPhone у меня есть реализация CLLocationManager в моем единственном ViewController, потому что у меня есть только один View. Нет, я хочу, чтобы в моем приложении было больше видов, и для каждого вида требуется информация о местоположении из CLLocationmanager.

Итак, я думаю, что мне нужно перенести реализацию из ViewController в мой AppController, потому что я не хочу реализовывать CLLocationManager в каждом ViewController, верно?

Но теперь я действительно не знаю, как ViewCotrollers получат информацию о местоположении? Я думал о реализации класса Singleton, где я храню информацию, и каждый VieController может получить информацию оттуда. Но для этого мне нужно реализовать таймер или что-то подобное в ViewControllers, чтобы они каждую секунду проверяли наличие новых данных. Этот звук не очень хороший и дерьмовый.

Как ViewControllers может автоматически получать новую информацию о местоположении? Может быть, мне нужно что-то вроде наблюдателя, но, может быть, в Cocoa / ObjC что-то готово? Я думаю, что я в неправильном направлении с моей заявкой.

Большое спасибо за любую помощь

twickl

1 Ответ

3 голосов
/ 19 мая 2009

Вот предложение с макушки головы, которое может быть полезным в качестве отправной точки. Вы правы, полагая, что не хотите повторять код для настройки соединения с CLLocationManager в каждом ViewController. Однако я бы не стал переносить этот код в ваш AppController (я полагаю, вы имеете в виду AppDelegate).

Я бы создал общий подкласс ViewController и назвал бы его что-то вроде LocationAwareViewController. LocationAwareViewController будет отвечать за создание соединения с CLLocationManager и за «подписку» на обновления.

Я бы настроил LocationAwareViewController в качестве делегата CLCLocationManager. Затем LocationAwareViewController реализует некоторые или все методы CLLocationManagerDelegate. Теперь этот ViewController будет получать обновления всякий раз, когда доступна новая информация о местоположении. Вам не нужно настраивать таймеры опроса.

Каждый из ваших определенных ViewController будет тогда подклассом LocationAwareViewController. Они также могут переопределить методы CLLocationManagerDelegate для выполнения определенных действий для представлений, за которые они отвечают.

Один отказ от ответственности: у меня еще не было возможности использовать Core Location, поэтому я основываю свои ожидания о том, как CLLocationManager работает только на одной документации. Это выглядит довольно просто, но, возможно, кто-то другой может предложить больше информации, основываясь на своем опыте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...