Мне нужен способ узнать текущее местоположение моего пользователя.
Так как у пользователя есть друзья, и у них есть данные о местоположении, я думаю, что правильный путь - это поместить поле местоположения в мою базу данных основных данных, как в Friend
, так и User
сущностях.
Теперь вот что я подумал:
Имейте какого-нибудь менеджера локаций Сингелтона, чтобы всякий раз, когда мне нужно точное местоположение, я говорю ему, чтобы он начал CLLocationManager
обновления. (за что отвечает мой менеджер)
Менеджер сохранит местоположение в поле user.location в Db, а контроллеры, заинтересованные в информации user.location, зарегистрируются, используя KVO для этих данных.
Это звучит хорошо для меня, кроме того факта, что я должен получить доступ к этому синглтону местоположения с каждого контроллера, который нуждается в точных местоположениях (чтобы сказать ему, чтобы он начал генерировать местоположение, я не хочу, чтобы обновления местоположения были включены постоянно). Кроме того, я стараюсь не загрязнять свой код кучей синглтон-вызовов.
Хотя, возможно, было бы разумнее иметь менеджер местоположения в качестве свойства внутри моего User
класса. (очевидно, если у меня есть несколько пользователей в памяти прямо сейчас, они все будут использовать один и тот же менеджер местоположения Singelton)
Я добавлю еще один метод к классу пользователя и назову его «StartGettingLocation
», и теперь, когда некоторый контроллер нуждается в текущем точном местоположении, он может выполнить одно из следующих действий:
- Если в моем контроллере у меня есть объект User (который был передан другим UIViewController), я просто вызываю его метод "
StartGettingLocation
" и KVO его поле местоположения.
- Если в моем контроллере нет объекта User, я получаю его из своей БД и делаю, как указано выше.
Это звучит правильно?
Если так, то в чем я не уверен, так это в том, возможно ли добавить новый член MyLocationManager в мой класс User (который является подклассом для managedObject)?
Как правильно это сделать?
Спасибо