Wie kann ich eine geordnete Liste in Core Data erhalten?

8

Ich schreibe eine API-Methode, die eine Liste von Objekten aus einem Webdienst zurückgibt. Dieser Dienst speichert auch Ergebnisse und versucht, die zwischengespeicherten Ergebnisse (falls vorhanden) zurückzugeben, bevor der Webdienst erneut gestartet wird. Also speichere ich diese Liste in einer Core Data-Entität. Core-Daten erlauben jedoch nur To-May-Beziehungen, die in einem NSSet gespeichert werden, wodurch die Reihenfolge nicht erhalten bleibt. Aber ich möchte, dass die zwischengespeicherten Ergebnisse die ursprüngliche Reihenfolge beibehalten (die ursprünglich vom Web-Service stammt). Ich weiß nicht unbedingt, wie diese Ordnung zustande kommt (also kann ich nicht sortieren).

Wie kann ich diese Reihenfolge beibehalten? Mein Plan ist, eine Zeichenfolge mit den Objekt-IDs zu speichern, die ich später verwenden kann, um sie zu ordnen:

%Vor%

Ist das der beste Weg?

    
caleb 05.01.2012, 21:49
quelle

3 Antworten

10

Wenn Sie iOS 5 als Ziel verwenden können, können Sie die neue verwenden NSOrderedSet -Funktion für beliebig geordnete Core Data-Beziehungen. Weitere Informationen hierzu finden Sie in den Core Data Release-Informationen für iOS 5 neues Feature.

Wenn Sie iOS 4 unterstützen müssen, müssen Sie die Bestellung selbst durchführen. Eine gängige Vorgehensweise besteht darin, Ihrem Modell eine Integer-Eigenschaft hinzuzufügen, die Sie dann selbst verwalten müssen. Sie können diese Eigenschaft dann beim Abrufen Ihrer Daten sortieren.

Die Reihenfolge in einer komplett anderen Zeichenkette zu speichern, scheint der falsche Weg zu sein. Wenn die Reihenfolge wichtig ist, sollte diese Information in dem Modell sein und der Benutzer sollte in der Lage sein, direkt danach zu fragen ("gebe mir die ersten fünf Objekte dieser speziellen Liste" oder "Was ist der Index von Objekt foo"). Eine Objekt-ID zu erhalten, sie zu parsen und dann nach bestimmten Objekt-IDs zu suchen, fühlt sich sehr falsch an.

    
Sebastian Celis 05.01.2012, 22:04
quelle
1

Das ist eine subjektive Frage. Sie können sie auch als verknüpfte Liste in der gewünschten Reihenfolge einrichten.

    
Jim 05.01.2012 21:56
quelle
1

Fügen Sie ein eigenes NSNumber-ID-Feld in das CoreData-Modell ein, in dem Sie die Objekte speichern. Die ID wird die Reihenfolge darstellen, die Sie bewahren möchten; Sie müssen es natürlich selbst einstellen. Wenn Sie dann die Objekte von CoreData abrufen, können Sie das nach dieser ID sortieren. Möglicherweise möchten / müssen Sie den höchsten ID-Wert beibehalten, den Sie zugewiesen haben, um die Reihenfolge bei nachfolgenden Web-Service-Aufrufen und App-Starts korrekt beizubehalten.

    
Mark Granoff 05.01.2012 22:01
quelle