Архитектура iPhone Core Location — как использовать ее на нескольких контроллерах

Мне нужен способ получить моего пользователя Текущее местоположение.

Поскольку у пользователя есть друзья и у них также есть данные о местоположении, я думаю, что правильный путь — поместить поле местоположения в базу данных основных данных, как в Друг, так и в Пользователь. объектов.

Вот что я подумал:

У меня есть какой-то менеджер местоположений синглтон, который всякий раз, когда мне нужно точное местоположение, я говорю ему, чтобы он запускал обновления CLLocationManager. (за что отвечает мой менеджер) Менеджер сохранит местоположение в поле user.location в базе данных, а контроллеры, заинтересованные в информации user.location, зарегистрируются с помощью KVO для этих данных. Для меня это звучит хорошо, кроме того факта, что я должен получить доступ к этому синглтону местоположения с каждого контроллера, которому нужны точные местоположения (чтобы сказать ему, чтобы он начал генерировать местоположение, я не хочу, чтобы обновления местоположения были включены все время). Кроме того, я стараюсь не загрязнять свой код кучей однотонных вызовов.

Я думаю, что, возможно, было бы разумнее иметь диспетчер местоположения в качестве свойства внутри моего класса User.(очевидно, если у меня сейчас в памяти несколько пользователей, все они будут использовать один и тот же менеджер местоположений синглтон) Я добавлю еще один метод в пользовательский класс и назову его "StartGettingLocation", и теперь всякий раз, когда какому-либо контроллеру требуется текущее точное местоположение, он может сделать одно из следующих действий:

  1. Если в моем контроллере у меня есть объект пользователя (который был передан другим UIViewController), я просто вызываю его метод «StartGettingLocation» и KVO его поле местоположения.
  2. Если у меня нет объекта User в моем контроллере, я получаю его из своей БД и делаю, как указано выше.

Это звучит правильно?

Если да, то в чем я не уверен, так это в том, можно ли добавить нового члена MyLocationManager в мой класс User (который является подклассом на manageObject)? Каков правильный способ сделать это?

Спасибо

6
задан Idan 30 March 2012 в 15:07
поделиться