Избавьтесь от кэшированных данных в didUpdateToLocation - PullRequest
4 голосов
/ 04 октября 2010

Я пытаюсь получить реальную позицию на симуляторе iPhone. Но я всегда получаю кешированный результат. Мой вопрос связан с этим и этим вопросом . Я использую код из примера LocateMe:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
     NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;
    if (newLocation.horizontalAccuracy < 0) return;
    if (bestEffortAtLocation == nil || bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
        self.bestEffortAtLocation = newLocation;
        if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {

            [locationManager stopUpdatingLocation];
            locationManager.delegate = nil;

            latitude = newLocation.coordinate.latitude;
            longitude = newLocation.coordinate.longitude;
        }
    }
}

Но, похоже, это не работает правильно:

if (locationAge > 5.0) return;

Если координаты GPS старше 5 секунд, метод вернется. Но в моем случае (iPhone Simulator) метод вызывается только один раз. Поэтому выход из метода не очень хорошая идея. Если я извлекаю местоположение в начале метода, я получаю кэшированные результаты. В приведенном выше примере кода я никогда не получаю координату.

Чего мне не хватает?

Редактировать 1:

Все отлично работает на iPod touch.

Редактировать 2:

Как я могу заставить locationManager обновить свое местоположение? distanceFilter установлен на kCLDistanceFilterNone, но он не обнаруживает, что положение изменилось за несколько километров.

Как узнать, что данные о местоположении готовы? Например. обновления местоположения приходят каждые 10 секунд, нужно ли вводить паузу? Потому что мое приложение немедленно принимает существующее значение и не ждет, когда менеджер местоположения будет готов.

Редактировать 3:

Примерно через минуту я получаю

Ошибка: операция не может быть завершена. (ошибка 0 kCLErrorDomain.)

Я включил Wi-Fi, iPod touch и MacBook Pro с одинаковым SSID. Что я делаю не так?

Редактировать 4:

Кажется, проблема с Xcode 3.2.4 и iOS 4.1. Смотрите также здесь . Я не одинок: CLLocationManager на iPhone Simulator не работает с кодом kCLErrorDomain = 0 (много других результатов в Google)

Редактировать 5:

В iOS 4 Apple использует собственную базу данных для геолокации. Но я не понимаю, почему между iPod и MBP есть разница.

Редактировать 6:

Локализация также не работает на iPad. Кто-нибудь придумал решение?

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