indexPath
не объявлен, потому что в этом случае вы не реализуете метод UITableViewDataSource
! Я не знаю, чего вы здесь добиваетесь, но думаю, что может быть более одного возможного решения. Во-первых, вы можете попытаться добавить свойство object
к аннотации и использовать его для получения соответствующего NSManagedObject
из аннотации. Во-вторых, вы можете использовать NSMutableDictionary
для хранения объектов вместо NSArray
. Вы бы использовали его следующим образом:
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
for(NSManagedObject *object in markerObjects) {
// Create the annotation
MapLocation *annotation = [[MapLocation alloc] init];
[dictionary setObject:object forKey:annotation]
}
Тогда вы получите соответствующий объект для аннотации, подобной этой:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
NSManagedObject *object = [dictionary objectForKey:view.annotation];
// Do whatever you want with your object
}
Обратите внимание, что MapLocation
здесь должен соответствовать протоколу NSCopying
, поскольку он копируется методом setObject:forKey:
.
В-третьих, вы можете добавить всю информацию (адрес, город, штат и т. Д.) В свой подкласс NSManagedObject
, соответствующий протоколу MKAnnotation
, и у вас больше не будет проблемы с получением аннотации, соответствующей к объекту, так как это было бы то же самое.