У меня есть подкласс "Location" NSManagedObject, и этот класс соответствует MKAnnotation.
Когда я добавляю местоположение на карту ... запускается ReverseGeocoder. Нажав на контакт, который я вижу в выноске, просмотрите адрес контакта. Так что все работает отлично.
Теперь моя проблема.
Я могу перетащить булавки. Когда я закончу перетаскивание, ReverseGeocoder снова начнет запрашивать данные о местоположении. Но у меня все еще есть старый адрес в представлении выноски, хотя метки обновляются в объекте Location. После перетаскивания снова вижу новый адрес. (конечно, новый больше не новый, потому что я потащил).
Вот мой код состояния перетаскивания:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState{
//if dragging ended
if (newState == MKAnnotationViewDragStateNone && oldState == MKAnnotationViewDragStateEnding) {
CLLocation *location = [[CLLocation alloc] initWithLatitude:annotationView.annotation.coordinate.latitude longitude:annotationView.annotation.coordinate.longitude];
[self geocodeLocation:location forAnnotation:annotationView.annotation];
[location release];
}
И код моего делегата обратного геокодера
- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFindPlacemark:(MKPlacemark*)place
{
Location* theAnnotation = [self.map annotationForCoordinate:place.coordinate];
if (!theAnnotation)
return;
// Associate the placemark with the annotation.
theAnnotation.city = [place locality];
theAnnotation.zipcode = [place postalCode];
theAnnotation.street = [place thoroughfare];
DEBUGLOG(@"Place: %@", place);
// Add a More Info button to the annotation's view.
MKPinAnnotationView* view = (MKPinAnnotationView*)[self.map viewForAnnotation:theAnnotation];
if (view)
{
DEBUGLOG(@"SUBTITLE: %@", theAnnotation.subtitle);
view.leftCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
}
}
Любая помощь была бы чудесной. В конце концов, приложение «Карты» - лучший пример для этого путем перетаскивания.