1

J'ai une sous-classe "Location" de NSManagedObject et cette classe est conforme à MKAnnotation. Lorsque j'ajoute un emplacement à une carte ... le ReverseGeocoder démarre. En cliquant sur la broche que je vois dans la légende Voir l'adresse de la broche. Donc tout fonctionne bien.Géocodage inverse sur MKMapView en faisant glisser les broches

Maintenant mon problème.

Je suis capable de faire glisser les broches. Quand j'ai fini de glisser, le ReverseGeocoder commence à demander l'emplacement Data. Mais j'ai toujours l'ancienne adresse dans la vue de légende, bien que les repères soient mis à jour dans l'objet Emplacement. Après avoir fait glisser à nouveau je peux voir la nouvelle adresse. (bien sûr, le nouveau n'est plus nouveau, parce que j'ai traîné).

Voici mon code pour l'état glissant:

- (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]; 
} 

Et le code de mon délégué inverse de géocodage

- (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]; 

    } 
} 

Toute aide serait merveilleux. À la fin, l'application Maps est le meilleur exemple pour faire cela en faisant glisser.

Répondre

2

J'ai compris.

A cause de KVO, je dois définir le sous-titre de l'objet Location. Donc, il est affiché.

Mais parce que le subtilte est généré par

// Associate the placemark with the annotation. 
theAnnotation.city = [place locality]; 
theAnnotation.zipcode = [place postalCode]; 
theAnnotation.street = [place thoroughfare]; 

Je viens de faire ce qui suit dans mon NSManagedObject sous-classe.

- (void) setSubtitle:(NSString *)title{ //do nothing}