2009-09-06 8 views
0

Я написал приложение для iPhone, которое использует относительное местоположение GPS в iPhone.Местоположение GPS занимает несколько секунд, чтобы быть восстановленным

У меня есть кнопка в пользовательском интерфейсе, которая делает обратную геолокацию (вытаскивает базы имен улиц на lat и long). Единственная проблема заключается в том, что объект местоположения, полученный с помощью

CLLocation *location = [[self locationManager] location]; 

нет, если пользователь слишком быстро нажимает кнопку. Я инициализирую LocationManager в viewDidLoad, поскольку я не хочу, чтобы объект был создан, если пользователь не загружает этот экран. Я также начинаю обновлять местоположение сразу же ... но все же, если пользователь загружает экран и сразу же нажимает кнопку GPS, это место равно нулю.

Возникает вопрос: знаете ли вы, сколько времени CLLocationManager должен получить местоположение?

Благодаря

ответ

2

Он может взять телефон за несколько секунд, чтобы получить эти данные. Для удобства использования вы можете отключить управление кнопкой. Пожар NSNotification как только местоположение будет найдено. Зарегистрируйте контроллер просмотра, чтобы прослушать это уведомление, которое запускает селектор, который активирует управление кнопкой.

+0

Cheers. Отображение кнопки, когда доступное местоположение доступно, звучит как хорошая идея. У пользователей будет возможность вручную набирать название улицы. Благодаря! – nicktmro

+0

Имейте в виду, что Core Location, как правило, возвращает менее точное (или иногда даже кэшированное) местоположение, поскольку оно нулевое в правильном местоположении GPS, в зависимости от установленного вами значения точности. – Hunter

0

Приобретение исправления местоположения зависит от требуемой точности и того, были ли у него ранее какие-то данные о местоположении, какова погода, независимо от того, находитесь ли вы внутри/снаружи ... там действительно нет один ответ. Если вы заходите в приложение «Карты» и нажимаете кнопку «Найти», вы заметите, что в разных обстоятельствах через некоторое время после начала процесса разрешения.

Обратные вызовы расскажут вам, когда есть данные; вы не должны получать его путем опроса или принятия немедленного доступа (или, что еще хуже, блокировки приложения до тех пор, пока вы не найдете данные). Похоже, что ключевая проблема заключается в том, что ваша кнопка синхронно выполняет запрос и не является динамической; другими словами, условие расы гарантировало потерпеть неудачу в какой-то момент, независимо от того, какое значение «n» вы придумали.

Измените свой код, чтобы кнопка вызывала захват местоположения в фоновом режиме, а затем затем выводит информацию или заполняет форму позже.