2012-04-24 39 views
0

我目前有一個地圖視圖,其中有幾個對象在MKAnnotation協議之後。有兩種不同類型的對象,商店和競爭對手。不同的對象有不同類型的數據附加到他們。MKAnnotationView - MKAnnotation參數警告

加載mapView後,程序會自動將我們的商店和競爭對手的所有針腳放到地圖上。每個引腳使用自定義圖像。當你縮小到更大的區域時,顯然屏幕會變得非常混亂。我在本博客中介紹了基於鄰近度過濾對象的方法:http://www.fiveminutes.eu/having-fun-with-ios-map-kit-grouping-annotations/

但是,在與一些同事討論之後,我們決定嘗試改用相對較大的「方形」引腳和較小的針點引腳在地圖區域被改變爲經度或緯度增量大於1.0之後

我創建了方法並實現了在用戶放大和縮小時實現在較小和較大引腳之間切換的過程,但我無法擺脫此警告:

Sending "MKAnnotationView *" to parameter of incompatible type 'id<MKAnnotation>'

我知道這意味着我們可能會做一些可能會導致問題的錯誤,所以我想在幾天之內將它修復到V1.1版本之前。

以下方法是我如何測試以查看我的區域是否已經改變,超出了我想要更改引腳的程度。 usingLargeIcons是一個布爾值,它使得我們在圖標已經達到期望的大小時不會調用change方法。

​​

這個方法,你可以看到只是調用兩個轉換方法。這些方法幾乎完全相同,但有兩個簡單的單詞更改小和大。我的目標是獲取地圖上的所有引腳並將它們轉儲到陣列中,在陣列中循環切換到較小的引腳。我不明白爲什麼我們收到關於我們的物體不匹​​配的警告。如果我在其他問題上錯過了這個問題,我很抱歉,請指出我的方向正確,我會繼續前進。我有谷歌搜索了幾個樣式問題,並沒有發現任何東西來描述這個對象的警告。

變換方法:

- (void)transformPinsSmall 
{ 
    usingLargeIcons = NO; 
    NSArray *allPins = [mapView annotations]; 
    for (MKAnnotationView *a in allPins) { 
     //Gets small UIImage for brand, changes pin image 
     [[mapView viewForAnnotation:a] setImage:[self imageForSmallAnnotation:a]]; 
    } 
} 

警告後的代碼在線路for循環。 「imageForSmallAnnotation」方法只是返回一個UIImage對象。有人請向我解釋如何輸入這些圖像或如何施放我的方法聲明,以便我可以刪除這些錯誤?

謝謝。

回答

0

任何機會,錯誤信息實際上是

Sending "MKAnnotationView *" to parameter of incompatible type 'id<MKAnnotation>' 

...而不是id<MKAnnotationView>

如果是,則問題是,[mapView annotations]返回註釋的陣列(即,採用MKAnnotation協議中的對象),並且您的for循環鑄造這些對象MKAnnotationView,然後運行到的問題。您可以嘗試:

for (id <MKAnnotation> a in allPins) { 

...這將解決[mapView viewForAnnotation:a]預計a是一個對象,該對象採用MKAnnotation協議,但發送的對象已被轉換爲MKAnnotationView

您可能還需要確保您的[self imageForSmallAnnotation:]的代碼正在接收它期望接收的對象的類,如果以及何時更改了a正在轉換的對象的類別。

+0

感謝您的回答,我能夠實現您的for循環,並從那裏糾正我所有的問題。我嘗試了'id a',但我仍然對objective-c很陌生,並沒有意識到我需要這兩種數據類型。 – Kyle 2012-04-24 21:33:13