2009-05-06 10 views
1

ich die Core Data Tutorial Persist und die Reihenfolge der Core Data neu anordnen zeichnet

http://macresearch.org/cocoa-scientists-part-xxiii-itunes-ifying-core-data-app

Die fertige Anwendung zeigt die Daten in einem NSTableView bei

gefolgt. Ist die Reihenfolge der Daten auch persistent? Und gibt es eine Möglichkeit, dass Sie Drag-and-Drop-Umlagerungen in die Reihenfolge der Datensätze zulassen können? Ich denke über etwas nach, das ähnelt, wie iTunes es Ihnen ermöglicht, Lieder in einer Wiedergabeliste mit Drag & Drop neu anzuordnen.

Antwort

4

Core Data erwartet, dass Sie Ihre eigene Sortierung mit NSSortDescriptors definieren, daher müssen Sie Ihr eigenes Attribut hinzufügen, um einen benutzeranpassbaren Ordnungsindex wie diesen zu verfolgen. Ich hatte Glück, KVO auf dem Beziehungsschlüsselpfad der Entität zu verwenden (innerhalb des verwalteten Objekts selbst), um die Reihenfolge nach Bedarf zu ändern, wenn neue Beziehungsobjekte hinzugefügt oder entfernt werden.

Um die Neuanordnung durchzuführen, sollten Sie die Drag & Drop-Methoden von NSTableView nutzen und das Attribut für den Auftragsindex nach Bedarf zurücksetzen. Die NSTableView-Dokumentation sollte das ziemlich gut erklären.

0

Sie müssen ein Feld hinzufügen, das die Reihenfolge der Elemente verfolgt (könnte ein Integer-Feld sein). Wenn Sie die Objekte in die Tabelle einfügen, müssen Sie nach diesem Feld sortieren.

Wenn Sie das Ziehen und Ablegen implementieren, sollten Sie die Reihenfolge der Elemente aktualisieren.

0

Anstelle der Ganzzahl verwende ich das tatsächliche Datum und die Uhrzeit (Art der Zeitstempel) der Erstellung. Dadurch wird sichergestellt, dass Ihr Bestellfeld nicht doppelt vorhanden ist.

Wenn ich dann einen Gegenstand nach oben/unten verschiebe, tausche ich einfach ihr Auftragsfeld. Es hat relativ geringe Verarbeitungskosten.

Wenn ich die Daten abrufe, wähle ich einfach die Elemente in der Reihenfolge des Feldes am aus.

+1

Dies funktioniert nur, wenn Sie zwei aufeinanderfolgende Elemente austauschen. – Kamchatka