Проблема в перемещении MKPinAnnotation на карту iPhone - PullRequest
3 голосов
/ 10 августа 2009

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

Я установил координаты по умолчанию на 0,0 в viewdidload: метод, и я добавил пин-код в этом месте. Я сделал это, потому что хочу удалить булавку при обновлении местоположения, а затем снова вставить булавку в новое местоположение.

Вот код, который я написал в - (void) locationManager: didUpdateToLocation: fromLocation: метод.

 [mapview removeAnnotation:myannotation]; 
 CLLocationCoordinate2D currentlocation;
 currentlocation.latitude=newLocation.coordinate.latitude;
 currentlocation.longitude=newLocation.coordinate.longitude;

 myannotation=[[[CSMapAnnotation alloc]initWithCoordinate:currentlocation annotationType:CSMapAnnotationTypeStart title:@"My Location"] autorelease];

 [mapview addAnnotation:myannotation];  

Здесь myannotation - это пин, который я хочу добавить, newLocation - это обновленное местоположение, а CSMapAnnotation вернет представление аннотации.

Проблема в том, что мое приложение вылетает каждый раз. Я смог получить предупреждение на консоли перед сбоем. Вот сообщение:

"Экземпляр 0x182020 класса CSMapAnnotation освобождается, в то время как наблюдатели значения ключа все еще зарегистрированы в нем. Информация наблюдения просочилась и может даже ошибочно присоединиться к какому-либо другому объекту."

Итак, плз, помогите, если кто-нибудь сталкивался с такой же проблемой ...

Ответы [ 3 ]

1 голос
/ 10 августа 2009

Несколько вещей, на которые стоит обратить внимание:

  • MKMapView уже имеет атрибут showsUserLocation, который отслеживает местоположение пользователя для вас с помощью пульсирующей синей точки. Если вы хотите отдельно установить пин-код для этого местоположения, вы можете получить атрибут userLocation из карты.

  • Ошибка может произойти из-за вызова autorelease. Самый простой способ исправить это - сделать myannotation свойством с атрибутом retain, затем убрать авто-релиз и вместо myannotation использовать self.myannotation.

  • Не совсем понятно, что вы имеете в виду, устанавливая «координаты по умолчанию 0, 0». Если это широта / долгота, тогда вы ставите булавку в Гринвиче, Англия :-) На самом деле вам не нужно постоянно добавлять и удалять аннотации. Вы можете добавить их один раз, а затем настроить их положение по мере необходимости.

0 голосов
/ 07 мая 2011

Я только что столкнулся с той же проблемой, и это было связано с координатами аннотации. Я уже игнорировал 0,0, но по какой-то причине пользователи вводили -180, -180 (возможно, с устройства, где мы не могли определить местоположение?)

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

0 голосов
/ 10 августа 2009

Я думаю, что вам не нравится ваш тег autorelease для myannotation, когда вы добавляете аннотацию к карте, она не может быть сохранена, а затем она просто освобождается и падает, вот что я могу придумать, посмотрев на код Вы отправили. Надеюсь, это поможет

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