我有一个NSManagedObject的子类“Location”,这个类符合MKAnnotation。
当我向地图添加位置时... ReverseGeocoder启动。通过单击标注中看到的引脚查看引脚的地址。所以一切正常。
现在我的问题。
我能够拖动别针。当我完成拖动时,ReverseGeocoder再次开始询问位置数据。但是我仍然在callout视图中有旧地址,尽管在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];
}
}
任何帮助都会很精彩。最后,地图应用程序是通过拖动来实现这一目标的最佳示例。
答案 0 :(得分:2)
我想通了。
由于KVO,我不得不设置Location对象的副标题。所以它会显示出来。
但是因为subtilte是由
生成的// 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}