IOS Location обнаружил обнаружение - PullRequest
0 голосов
/ 19 декабря 2011

В настоящее время я создаю приложение, которое показывает близлежащие рекламные объявления на основе текущего местоположения.Когда пользователь запускает приложение в первый раз, я хочу, чтобы он увидел топ-10 ближайших рекламных объявлений.

У меня небольшая проблема с доставкой местоположения вовремя.Моя проблема в том, что текущее местоположение еще не загружено до загрузки представления.Конечно, есть делегат UpdaterLocation, но этот срабатывает несколько раз.Я предполагаю, что он срабатывает несколько раз, потому что он хочет получить наиболее точное местоположение?

Итак, мой вопрос;Что я могу сделать, чтобы «подождать», пока местоположение не будет найдено, а затем начать поиск рекламы?

Заранее спасибо!

С уважением, Митчел

Ответы [ 4 ]

1 голос
/ 19 декабря 2011

Когда CLLocationManager получает обновленное попадание из базовой системы расположения, он запускает метод своего делегата didUpdateToLocation:fromLocation:. Внутри этого метода вы хотите делать все, что делаете, когда получаете обновленное местоположение.

В вашем случае вы захотите проверить свойство .horizontalAccuracy этого нового местоположения, чтобы убедиться, что это высококачественный результат. Возможно, вы также захотите бросить первые несколько, потому что CL даст вам последний удар в последнем сеансе определения местоположения в качестве вашего первого попадания в новый.

В любом случае, это метод, при котором вы хотите получать данные.

1 голос
/ 19 декабря 2011

Нет одного местоположения, вы получаете серию местоположений из CL, одно из которых кэшируется, а затем другие, меняются по точности с течением времени, улучшая (или ухудшая) точность, занимая от 1 секунды до 10 минут.

CL начнет с того, что даст вам кэшированное местоположение, которое может быть достаточно для ваших целей.Если он не слишком старый (<60 секунд) и имеет разумную точность, продолжайте и используйте кэшированное местоположение, это будет быстрый результат.В противном случае вам придется ждать достаточно хорошей точности (вам нужно решить, что достаточно, посмотрите на <code>.horizontalAccuracy).

Если вы настаиваете на наличии местоположения до вызова viewDidLoad (лучше будет использовать viewWillAppear)) затем вы должны отложить нажатие этого viewController, пока у вас не будет достаточно места.Как вы это сделаете, зависит от того, как загружается этот контроллер представления.

1 голос
/ 19 декабря 2011

Вам следует обновлять представление каждый раз, когда вы получаете (более точное) местоположение.Поэтому запомните последнее местоположение и проверьте, не уменьшилось ли horizontalAccuracy / verticalAccuracy (меньше = более точно, но отрицательно = неверно).Возможно, даже обновление каждый раз, когда вы получаете новое местоположение, будет лучше, так как точность может не измениться, но позиция меняется (пользователь перемещается).

Если вы просто показываете список, вы должны помнить предыдущие результаты.Получите новый результат и, если они отличаются, обновите свой список.

0 голосов
/ 23 декабря 2011

Вот что я бы сделал.Загрузите ваше представление и в вашем viewDidAppear вызовите ваш метод для обновления местоположения.Я использую хороший проект с открытым исходным кодом на Github под названием MBProgressHUD .На экране будут отображаться различные индикаторы хода выполнения (которые также будут блокировать выход пользователя из режима просмотра), пока он завершит свою работу.Это также дает визуальную обратную связь пользователю, что ваше приложение не остановилось и работает.

Вам все еще нужно разобраться с проблемами точности, но прогрессивный режим дает вам время загрузить представление и привлечь пользователя, пока вы вытягиваете то, что вам нужно.И сохраняет ваш интерфейс жидкости.

...