Создание 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()) что неправильно.

Другие вопросы по тегам