2011-12-28 15 views
0

我想了解的MKMapView類基於對文檔的爲什麼擁有的MKMapView NSObject的財產

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html

之一的MKMapView的屬性是註釋。 但是MVC的前提不是視圖不擁有這些數據嗎?

在我見過的類的示例實現中,註解屬性實際上是在包含mapview對象的MapViewController.h中聲明的。那麼註解甚至是MapView的屬性如何。

請指出我的假設/理解是否有錯誤。 謝謝

回答

1

MKMapView的屬性之一是註釋。但是MVC的前提 是Views不擁有數據嗎?

視圖,如地圖視圖不應管理的數據 - 也就是說,它不應該知道或關心其中的數據來源,擔心保存它,等,但在大多數情況下,它會不知道如何繪製自己而不知道視圖中應該表示哪些數據。除非你告訴它標籤的文字應該是什麼,否則你不能指望一個標籤將正確的字符放在屏幕上,對嗎?註釋也是一樣。地圖視圖不知道或關心他們來自哪裏或他們是什麼類。只要他們實施MKAnnotation協議,地圖視圖就很開心。它必須保留已添加到地圖的任何註釋,當然,但它不需要知道關於它們的任何其他信息。

在一個示例實現我見過的類,註釋 財產MapViewController.h實際上是宣稱,包括 的MapView對象。

地圖視圖控制器通常也需要了解註釋。畢竟,它通常是管理註釋的控制器,並將它們添加到地圖中。另外,視圖控制器通常是充當地圖視圖委託的對象,因此當有人點擊註解附件時,該對象必須作出響應。

那麼註解甚至是MapView的屬性如何。

MKMapView負責顯示地圖上顯示的地理區域的正確註釋。要做到這一點,它需要知道全部可以顯示的註釋。您可以在關聯的區域可見時添加您希望地圖顯示的註釋,並且不必在每次地圖區域更改時都找出哪些是可見的。爲了做到這一點,地圖顯然必須跟蹤所有已添加的註釋。

它不一定是那樣的。 MKMapView可以像UITableView一樣實現;它可能會要求代表在特定區域顯示數據。就像UITableViewDataSource有-tableView:cellForRowAtIndexPath:一樣,MKMapDelegate可能有一個-mapView:annotationsForRegion:方法。但是如果這樣做的話,每個地圖代表都必須能夠有效地找到給定區域的註釋,並且爲了提供正確的設置,SO會有幾十個關於如何正確實現四叉樹的問題對地圖視圖的註釋。將所有這些邏輯放在MKMapView中使得該類更加容易使用。而且由於MKMapView不是管理註解,所以沒有違反MVC。

相關問題