发送&#39; MKPointAnnotation * __ strong&#39;到不兼容类型的参数&#39; id <nscoping>&#39; </nscoping>

时间:2014-10-28 13:33:03

标签: objective-c mkannotation mkpointannotation

我有一个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>'

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不能使用不符合NSCopying协议的内容作为字典中的键。你将不得不使用其他的东西。

解决这个问题的一种方法是使MKPointAnnotation的子类具有额外的相关属性 - 在这种情况下,您也可以只使用该对象上的额外属性而不是去首先通过字典。