2010-08-26 9 views
6

Ich versuche ein Favoriten-System für meine App zu schreiben. Ich habe mein Modell bereits in ein verwaltetes Objekt konvertiert. Stellen Sie sich vor, dem Benutzer wird ein Bildschirm mit einer Liste solcher Objekte angezeigt. Sie können wählen, einige zu ihren Favoriten zu speichern, die sie in den Kerndaten bestehen bleiben.Kerndaten: Erstellen Sie mehrere verwaltete Objekte, aber nur einige speichern?

Das Problem ist, wenn ich alle diese Modellobjekte erstellen, mache ich dies mit dem Kontext des verwalteten Objekts. Wenn der Benutzer einen einzelnen in seine Favoriten speichert, wird der gesamte Kontext gespeichert und jede einzelne Entität beibehalten. Die Extras werden nicht in ihren Favoriten sein, da das Hinzufügen zu den Favoriten eine "Lieblings" -Entität erstellt, die gespeichert wird und auf das Objekt zeigt, was die anderen nicht haben werden. Aber alle anderen Objekte werden unnötig gespeichert.

Was ist der Standard Weg aus diesem/Standard Weg, ein iPhone Favoriten-System zu entwerfen? Sollte ich mein Modell in zwei Klassen aufteilen, die ich dem Benutzer zeige und dann eine, die in der Datenbank gespeichert wird? So konnte ich meine Modelle konstruieren, ohne sie in den MOC zu stecken. Aber das wäre eine doppelte Klasse mit den gleichen Feldern.

Antwort

6

Es gibt keine Standardmethode, da Core Data erwartet, dass Sie die von Ihnen erstellten Objekte speichern. Wenn Sie jedoch die Objekte mit erstellen:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil]; 

Sie haben keinen Kontext zum Speichern gegen. Dann gilt für diejenigen, müssen Sie Sie können sparen:

[[self managedObjectContext] insertObject:object]; 

Dann -save: auf den Kontext nennen und nur diejenigen, die ihren Kontext Satz hatten sparen.

+0

Und das ist sicher? Ich habe gesehen, dass die Convenience-Methode zum Erstellen von NSMOs einen ziemlich großen Codeabschnitt ersetzt. – Tesserex

+0

Ja ist es sicher, welche Bequemlichkeitsmethode? Die beschriebene Methode entspricht dem Aufruf von '[NSEntityDescription einfügen ...]'. Der einzige Unterschied besteht darin, dass die 'NSEntityDescription'-Methode ein automatisch freigegebenes Objekt zurückgibt. –

+1

Ok, du hast nur dein zweites Ding zurück. Der korrekte Aufruf ist '[[self managedObjectContext] addObject: object]', die Konversation, die Sie dort haben, existiert nicht. – Tesserex

0

Wäre es nicht einfacher, eine isFavorite-Eigenschaft auf Ihren verwalteten Objekten zu haben. Dann können Sie in Ihrer Favoritenansicht darauf basierend filtern?

+3

Aber das geht immer noch nicht um die Tatsache, dass ich eine ganze Menge von Daten speichern, die ich nicht brauche. – Tesserex