2014-10-28 82 views
0

我有一個MKMapView。在這個視圖中,我創建了一些註釋。當用戶點擊註解泄露按鈕時,我想推入詳細視圖。發送'MKPointAnnotation * __ strong'參數的不兼容類型'ID <NSCoping>'

當我創建註釋時,我還填充了一個NSMutableDictionary,以便能夠以點爲關鍵點獲取商店對象。

當用戶選擇所述註釋,我想呼叫的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>' 

這怎麼解決?

+2

正如@Jesper建議的那樣,子類MKPointAnnotation並添加自定義屬性以保留對註釋對象本身中每個註釋的Store的引用。單獨的字典不是必需的。另一種方法是:因爲你已經有一個'Store'類,所以只需要實現'MKAnnotation'協議並將Store對象本身添加到地圖。這樣,註釋就是商店。要創建一個實現MKAnnotation的類,請參閱http://stackoverflow.com/questions/5939223/store-data-in-mkannotation舉一個例子。 – Anna 2014-10-28 14:03:44

+0

+1,@Anna。實施'MKAnnotation'是一個很好的選擇。 – Jesper 2014-10-28 14:05:17

+1

@安娜,如果你提供這個答案,我會接受它!感謝您的意見,它的工作。 – doonot 2014-10-29 14:48:24

回答

1

您不能使用不符合NSCopying協議的內容作爲字典中的鍵。你將不得不使用別的東西。

解決此問題的一種方法是使MKPointAnnotation的子類具有用於關聯的額外屬性 - 並且在這種情況下,您也可以只使用該對象上的額外屬性或屬性,而不是通過字典首先。

相關問題