MKMapViewのプロパティの1つは注釈です。しかし、MVCの という前提はありません。ビューはデータを所有していないのですか?
地図ビューなどのビューではデータを管理すべきではありません。つまり、データがどこから来ているか気にする必要はありません。保存するなどの心配はありません。どのデータをビューでどのように表現するかを知らなくても、自分自身を描画する方法を知ることは難しいでしょう。あなたは、ラベルのテキストが何であるべきかをあなたが教えない限り、ラベルが画面上に正しい文字を置くことを期待できませんでしたか?アノテーションと同じです。マップビューは、どこから来たのか、どのようなクラスであるかを知らない、または気にしません。彼らがMKAnnotationプロトコルを実装している限り、マップビューは満足しています。もちろん、地図に追加されたアノテーションはすべて保持する必要がありますが、それらについては他のことを知る必要はありません。私が見てきたクラスの実装例で
、注釈 プロパティは、実際のMapViewオブジェクト を包含することMapViewController.hで宣言されました。
マップビューコントローラは、しばしばアノテーションについて知る必要があります。結局のところ、それは通常、注釈を管理し、最初にそれらを地図に追加するコントローラです。また、View Controllerは通常、マップビューデリゲートとして機能するオブジェクトであるため、アノテーションのアクセサリをタップすると応答する必要があるオブジェクトです。
このように、注釈はMapViewのプロパティでもあります。
MKMapViewは、マップに表示されている地理的領域に適切な注釈を表示します。これを行うには、すべての注釈が必要です。はと表示されます。関連付けられた領域が表示されているときにマップに表示する注釈を追加し、マップ領域が変更されるたびに表示される注釈を特定する必要がありません。これを行うためには、マップは明らかに追加されたすべての注釈を追跡しなければなりません。
このようにする必要はありませんでした。 MKMapViewはUITableViewのように実装できました。デリゲートにデータを表示して特定の領域に表示することができました。 UITableViewDataSourceが-tableView:cellForRowAtIndexPath:
の場合と同様に、MKMapDelegateは-mapView:annotationsForRegion:
メソッドを持つ可能性があります。しかし、そうしてしまえば、すべての地図代理人は特定の地域の注釈を効率的に見つけることができなければならず、SOは適切なセットを提供するためにクワッドツリーを適切に実装する方法について何十もの質問をしていましたのアノテーションをマップビューに追加します。 MKMapViewにそのロジックをすべて入れておくと、クラスをずっと使いやすくすることができます。また、MKMapViewはであり、アノテーションをとして管理していないため、MVCに違反することはありません。