Почему свойство userLocation MKMapView на некоторое время является мусором? - PullRequest
3 голосов
/ 05 января 2011

У меня есть представление карты, определенное в IB, и оно настроено на отображение местоположения пользователя.

В моем приложении в -viewDidAppear я запрашиваю self.mapView.userLocation.location.coordinate и возвращается с такими безумными значениями, как:

широта : 4.8194501961644877e-49
долгота : 2.2993313035571993e-59

Однако в следующий раз -viewDidAppear (после того, как я просто перешел в другое представление с вкладками и затем вернулся к этому), свойство userLocation содержит точно правильные значения для моеготекущее местоположение.

Кажется, что во время моего первоначального вызова свойство userLocation не было инициализировано, но, несмотря на то, что я прочитал документацию Apple, я не вижу никаких предупреждений, где говорится, чтоэто свойство действительно только после выполнения xxx.

Есть ли что-то, что должно произойти до того, как userLocation допустимо для использования, или я должен просто использовать CLLocationManager и спросить еговместо этого?

Заранее спасибо за любую помощь.

К сожалению, предложение Томаса не помогло.С тех пор я обнаружил:

Если показывает, что пользовательское расположение равно НЕТ, то userLocation никогда не устанавливается правильно, а -MapView: didUpdateUserLocation: никогдаследовательно, я никогда не получаю разумного значения местоположения.

Итак, чтобы получить местоположение пользователя, я должен установить для showsUserLocation значение YES, однако это означает, что после того, как все мои аннотации былиПосле добавления к представлению (без учета местоположения пользователя) я вычисляю требуемый интервал, чтобы охватить их все и отобразить все с правильным уровнем масштабирования.Однако после того, как я это сделаю, вид переместится в сторону, так как вид карты автоматически отобразит местоположение пользователя в виде синей капли!Поскольку он никогда не включался в аннотации для определения уровня масштабирования, я не могу включить его в свои расчеты.Aaargh!

Обратите внимание, что когда показывает, что UserLocation равен YES, тогда вызывается -MapView: didUpdateUserLocation: , но только после того, как я вычислил все координаты моих аннотаций,не раньше!

Ответы [ 3 ]

5 голосов
/ 05 января 2011

Я предполагаю, что он еще не закончил поиск местоположения пользователя - он должен решить это, и это может занять некоторое время.

Вместо использования в viewDidLoad используйте ЭТОТ метод делегата:

- (void)mapView:(MKMapView *)myMapView didUpdateUserLocation:(MKUserLocation *)userLocation;

Вам необходимо установить делегата mapview на себя. :)

1 голос
/ 05 января 2011

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

Лучше всего проверить свойство .horizontalAccuracy объекта местоположения и отбросить слишком расплывчатое. Хорошей практикой будет просто забить первый.

0 голосов
/ 08 января 2011

для вызова didUpdateUserLocation необходимо иметь ... mapView.showsUserLocation = TRUE;

...