iPhone 3.0 SDKのMapKitを使用して、MKAnnotationプロトコルに準拠するオブジェクトを作成します。これらをMKMapViewにロードするのは非常に簡単です。ただし、ユーザーがMKMapViewをスクロールすると、新しい注釈をロードするときが来ました。新しいオブジェクトをリクエストする可能性のある場所は、mapView:regionDidChangeAnimated:です。これは、マップのリージョンが変更されたときに呼び出され、アノテーションを新しいものに追加/置換します。
具体的には、Core Dataにクエリを実行して、現在のMKCoordinateRegion(mapView.region)内に存在するすべてのオブジェクトを取得し、画面に表示されるオブジェクトのみをロードするようにします。Core Dataのオブジェクトには緯度と経度の属性があり(CLLocation属性はクラスの.m / .hで定義されており、そこから手動で入力できます)、これをNSPredicateに使用して近くのオブジェクトを検索します。
Core Dataデータベースに存在するオブジェクトの数の性質上、すべてのオブジェクトを注釈としてプリロードすることはできません。そうしないと、メモリが不足します(非常に遅くなります)。
現在のマップビュー境界に位置するオブジェクトのみを取得するにはどうすればよいですか?