我有一个MKMapView。在这个视图中,我创建了一些注释。当用户点击注释公开按钮时,我想推送到详细视图。
当我创建注释时,我还填充了一个NSMutableDictionary,以便能够以点作为键来获取商店对象。
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
CLLocationCoordinate2D annotationCoord;
annotationCoord.latitude = [[store storeLatitude] floatValue];
annotationCoord.longitude = [[store storeLongitude] floatValue];
point.coordinate = annotationCoord;
NSString *title = [store storeName];
point.title = title;
point.subtitle = location;
// keep reference to store object with the annotation point as key
[annotationStoreDictionary setObject:store forKey:point];
当用户选择注释时,我想调用DetailViewController并传递对象:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
DetailViewController *con = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
Store *store = [annotationStoreDictionary objectForKey:view.annotation];
con.store = store;
[[self navigationController] pushViewController:con animated:YES];
}
问题是MKPointAnnotation不符合NSCoping协议。它说:
Sending 'MKPointAnnotation *__strong' to parameter of incompatible type 'id<NSCoping>'
如何解决这个问题?
答案 0 :(得分:1)
您不能使用不符合NSCopying
协议的内容作为字典中的键。你将不得不使用其他的东西。
解决这个问题的一种方法是使MKPointAnnotation
的子类具有额外的相关属性 - 在这种情况下,您也可以只使用该对象上的额外属性而不是去首先通过字典。