Mit MapKit im iPhone 3.0 SDK erstellen Sie Objekte, die dem MKAnnotation-Protokoll entsprechen. Diese auf die MKMapView zu laden ist sehr einfach. Wenn ein Benutzer die MKMapView scrollt, ist es jedoch an der Zeit, neue Anmerkungen zu laden. Ein wahrscheinlicher Ort, um die neuen Objekte anzufordern, wäre in mapView: regionDidChangeAnimated:, die aufgerufen wird, wenn die Region der Karte geändert wird, und dann die Anmerkungen mit den neuen hinzufügen/ersetzen.Weitere Objekte aus Core Data laden, wenn ein Benutzer ein MKMapView scrollt
Insbesondere würde Ich mag Core Data abzufragen alle Objekte abzurufen, die MKCoordinateRegion (mapView.region) innerhalb des aktuellen existieren, so dass ich nur die Objekte laden, die auf dem Bildschirm angezeigt wird. Die Objekte in Core Data haben Breiten- und Längengradattribute (und ein CLLocation-Attribut ist in der Klasse '.m/.h definiert, die ich manuell daraus auffüllen kann) und verwenden dies für ein NSPredicate zum Auffinden nahegelegener Objekte.
Aufgrund der Art der Anzahl der Objekte in der Core Data-Datenbank können wir ALLE Objekte nicht als Annotationen laden, da sonst nicht genügend Speicher zur Verfügung steht (und es wäre quälend langsam).
Wie kann ich nur die Objekte abrufen, die Standorte in den aktuellen Mapview-Grenzen haben?
Dieses allgemeine Konzept hat gut für mich funktioniert! Das einzige, was ärgerlich ist, ist, dass es Objekte lädt, die gerade außerhalb der Grenzen des Rechtecks sind, so dass der Benutzer nicht sehen kann, wie es die Pins fallen lässt. Das ist meistens kosmetisch, also ist es keine Eile, es zu lösen. Irgendwelche Ideen, warum es jenseits der Grenzen ist? Ich kann nur davon ausgehen, dass die Grenzen größer sind als das, was auf dem Bildschirm SICHTBAR ist. Gedanken? –
Kevin, der Grund, warum Sie zu viele Objekte bekommen, ist, dass die Breiten- und Längengrad-Deltas beide zuerst halbiert werden müssen, da sie die Entfernung über die gesamte Region repräsentieren, nicht nur von der Mitte. Also zum Beispiel: minLat = currentCenter - (latDelta/2), usw. –