Обратное геокодирование в MKMapView с помощью перетаскивания - PullRequest
1 голос
/ 02 декабря 2010

У меня есть подкласс "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];

    }
}

Любая помощь была бы чудесной. В конце концов, приложение «Карты» - лучший пример для этого путем перетаскивания.

1 Ответ

2 голосов
/ 04 декабря 2010

Я разобрался.

Из-за KVO я должен установить субтитры объекта Location. Таким образом, это отображается.

Но поскольку субтиль генерируется

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

Мне просто нужно было сделать следующее в моем подклассе NSManagedObject.

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