Ich habe eine Reihe von Entitätsobjekten in meiner iOS Core Data-Datenbank, die etwas an einem Ort beschreiben. Lassen Sie uns die Entity Location nennen. Ich habe dies implementiert, indem ich zwei Attribute auf Location habe, die sich auf den Standort beziehen - Breite und Länge, beide Doubles. Es gibt andere Elemente, wie den Namen.Standorte in Core-Daten nach Entfernung über NSFetchedResultsController sortiert?
Ich verwende einen NSFetchedResultsController, um die Entitäten an einen UITableViewController zu binden. Ich möchte die Ergebnisse nach Entfernung zu einer bestimmten CLLocationCoordinate2D sortiert haben. In einem wirklich idealen Szenario kann ich diese Liste aktualisieren, um die Sortierung basierend auf einem neuen Speicherort neu zu berechnen. Daher hängt diese Art von zwei Schlüsseln und einer dritten "statischen" Variablen ab (eine, die nicht über die Elemente in der Sammlung variiert).
Ich denke ich könnte herausfinden, wie das geht, wenn ich eine willkürliche Liste mit NSSortDescriptors sortiere. Ich kontrolliere jedoch nicht, wie die Sortierdeskriptoren in einem NSFetchedResultsController verwendet werden.
Gibt es eine Möglichkeit, dass ich meine Entitäten, meine NSFetchedResultsController, meine NSSortDescriptors usw. konfigurieren könnte, um dies zu erreichen? Ich vermute, dass die Antwort nicht darin besteht, einen ausgefallenen NSSortDescriptor zu erstellen, sondern stattdessen ein transientes Attribut in der Entität zu erstellen, die die Distanz zu mir darstellt, und dieses Attribut periodisch neu zu berechnen. Ich bin jedoch neu genug für Core Data, dass ich nicht sicher bin, wie ich das am besten mache (über alle Entitäten iterieren und ein Feld neu berechnen). Ich bin mir auch nicht sicher, ob NSSortDescriptors mit transienten Attributen arbeiten wird.
Leider kann ein abgerufener Ergebnis-Controller nicht nach transienten Attributen oder berechneten Eigenschaften sortieren. Siehe http://stackoverflow.com/questions/13292582/nspredicate-with-function-not-working oder http://stackoverflow.com/questions/12027769/nssortdescriptor-sort-by-location für ähnliche Probleme und Verweise auf die Dokumentation. –
Vielen Dank! Ich habe das gesehen, und deshalb dachte ich, dass die Antwort darin bestehen könnte, Werte in meinen Kerndaten-Entitäten zu berechnen. Lassen Sie uns Transient vom Tisch nehmen - wenn es kein transientes Feld ist, wie würde ich dann vorgehen, um den Satz von Entitäten regelmäßig zu aktualisieren? –
Benötigen Sie wirklich einen abgerufenen Ergebnis-Controller? Wenn Sie die Objekte in ein Array abrufen, können Sie das Array im Speicher sortieren und als Datenquelle für die Tabellenansicht verwenden. –