2011-04-18 63 views
1

我有一個帶標題和副標題的自定義地標。字幕實際上是使用反向地理編碼器顯示丟棄的引腳的地址。iPhone - 在mapkit中更新註釋字幕

我有一個按鈕,它有一個動作來放棄引腳。此操作獲取用戶的位置座標,然後調用[Geocoder start],它使用Reverse Geocoder獲取完整地址,並生成自定義註釋,然後調用[mapView addAnnotation:customPlacemark]。

我的問題是,使用這個序列順序,當沒有WiFi連接(只有3G或可能是邊緣)的引腳花費很多,因爲它是watigin得到反向地理編碼信息。

所以基本上我需要刪除沒有字幕的pin,並從viewDidAnnotation調用地理編碼器和reverseGeocoder內部更新字幕,但我不知道如何做到這一點。

我想顯示沒有地址詳細信息的註釋,並在從反向地理編碼器獲取信息時進行更新。

有什麼建議嗎?

在此先感謝

回答

4

MKMapView觀察通過志願改變其註解。因此,如果您以符合KVO的方式更新您的註釋屬性,它應該是正常工作。

例如,當反向地理編碼爲您的註釋返回地址,首先宣佈titlesubtitle屬性是即將改變:

[self willChangeValueForKey:@"title"]; 
[self willChangeValueForKey:@"subtitle"]; 

注意,上面的代碼被認爲是在註釋類。

然後用來自地理編碼器的信息更新註釋。當您完成:

[self didChangeValueForKey:@"subtitle"]; 
[self didChangeValueForKey:@"title"]; 

注意順序didChangeValueForKey:改變這些需要被正確地嵌套,有點像HTML標籤。

這也適用於coordinate屬性,這將導致引腳移動。

+0

那麼在reverseGeocoder中,我甚至不需要創建一個新的customPlacemark對象? 使用[self willChangeValueForKey:@「title」]它如何知道我在引用我的自定義Placemark註釋? 非常感謝您的回答 – Chompas 2011-04-18 16:29:28

+0

如果從示例中不清楚該方法是從註釋類中調用的,那麼'self'就是添加到地圖視圖的註釋。您可以在反向地理編碼器中通過查找正確的註釋(地標)並在實例上調用'willChangeValueForKey:'和'didChangeValueForKey:'來執行此操作。 – freespace 2011-04-18 16:36:55

+0

今晚我會試試這個,告訴你它是怎麼回事。謝謝=) – Chompas 2011-04-18 18:31:29

0

我會放置註釋,在屬性中保留對它的引用,然後當您的反向地理編碼器回調時使用對註釋的引用並更新其屬性。