2012-04-14 17 views
2

Ich entwickle eine Anwendung, die CoreData verwendet.iPhone Core Data Fetch Primärschlüssel

So in .sqlite Datei, verwaltet es Primärschlüssel selbst.

Der Name des Primärschlüsselattributs ist Z_PK.

Mein Problem ist, dass ich möchte, dass Daten aus meiner Tabelle aufsteigend nach Primärschlüssel sortiert werden.

Ich verwende diesen Code

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"_PK" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

Aber es funktioniert nicht.

, wenn ich „Titel“ insted „_PK“ verwenden, es funktioniert gut

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

So gibt es eine andere Art und Weise Tabelle Primärschlüssel zu benutzen?

+0

Könnten Sie ein Bild oder Ihr Xcdatanodel posten, weil Ihre Frage ein wenig unklar ist? –

+0

** Primärschlüssel in Core Data? ** –

+0

Hallo Nikita, ich schreibe .Sqlite-Datei in das Dokumentenverzeichnis. –

Antwort

4

CoreData verwaltet persistente Objektdiagramme. Es ist kein RDBM. Sie haben keine Kontrolle über den eindeutigen Primärschlüssel, so dass Sie keine Kontrolle über seinen Wert haben. Es ist lediglich ein Implementierungsdetail und sollte aus keinem Grund referenziert werden.

Also, warum möchten Sie basierend darauf sortieren? Ich kann mir verschiedene Gründe vorstellen ...

  1. Sie möchten auf die Objekte in der Reihenfolge zugreifen, in der sie zur Datenbank hinzugefügt wurden. Sie können dies jedoch auf verschiedene Arten tun.

1a. Sie können jeder Entität ein Feld hinzufügen. Sie können es als UUID oder in aufsteigender Ganzzahl festlegen.

1b. Sie könnten eine Entität haben, etwa "EntityList", die eine geordnete Eins-zu-Viele-Beziehung zu "Entity" hat.

1c. Sie können eine Eins-zu-Eins-Beziehung von Entity zu sich selbst hinzufügen und sie dann einfach wie eine verknüpfte Liste verwalten. Jedes Mal, wenn Sie eine Entität hinzufügen, fügen Sie sie am Ende der Liste ein.

Jede dieser Lösungen gibt Ihnen die Möglichkeit, auf die Entity-Objekte zuzugreifen, nachdem sie hinzugefügt wurden.

  1. Oder Sie kümmern sich wirklich nicht um die Reihenfolge, die Sie sehen, aber Sie möchten eine beständige Reihenfolge.

2a. Fügen Sie ein primaryKey-Attribut hinzu und weisen Sie ihm eine UUID zu.

2b. Verwenden Sie die bestellte To-Viele-Beziehung.

Wenn Sie wirklich Zugriff auf Primärschlüssel wünschen, würde ich vorschlagen, eine separate SQLite-Datenbank zu haben, die Sie für speziellen Schlüsselzugriff verwenden. Sie können dann der Objekt-ID eines Objekts im CoreData-Speicher einen Schlüssel zuordnen.

+0

Danke Jody, ich habe eine alternative Netzlösung dafür. Aber ich wollte nur wissen, dass es möglich ist oder nicht? Danke für die Hilfe. –