Создание CLLocationCoordinate2D на лету при соблюдении протокола MKAnnotation
Я имею MyClass
что соответствует MKAnnotation
протокол. согласно документации, класс требуется для реализации coordinate
свойство, которое должно быть возвращено CLLocationCoordinate2D
пример. Моя первая реализация была такой:
-(CLLocationCoordinate2D)coordinate{
return MKCoordinateForMapPoint(MKMapPointMake(self.details.latitude, self.details.longitude));
}
но это не сработало: всякий раз, когда я звоню [self.mapView addAnnotation:instanceOfMyClass];
это просто не было добавлено к annotations
массив из mapView
!
Таким образом, решение для меня было определить переменную экземпляра _coordinate
в MyClass
и реализовать соответствие протокола следующим образом:
-(CLLocationCoordinate2D)coordinate
{
_coordinate.latitude = self.details.latitude;
_coordinate.longitude = self.details.longitude;
return _coordinate;
}
который сейчас работал. Итак, вопрос здесь в том, ПОЧЕМУ необходимо иметь переменную экземпляра и создать CLLocationCoordinate2D
на лету не работает?
1 ответ
Ваши значения self.details.latitude/longitude уже являются истинными / действительными географическими координатами?
В этом случае вы должны использовать CLLocationCoordinate2DMake(lat,lon)
функция вместо MKCoordinateForMapPoint(MKMapPointMake())
что неправильно.