7 Stimmen

NSMutableArray mit Kerndaten gespeichert = WORKS, aber nach Änderung des Arrays DOESN'T WORK

Ich habe ein NSManagedObject mit einem NSMutableArray als Attribut:

@interface MyObject :  NSManagedObject  
{
}

@property (nonatomic, retain) id a1;

Im Datenmodell wird sie deklariert als Transformable . Ich habe das Feld "Werttransformator" so belassen, wie es in der Standardeinstellung ist (in hellgrau) NSKeyedUnarchiveFromData .

a1 wird als Teil von theObject erstellt:

MyObject  *theObject = [NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext: myManagedObjectContext];

und initialisiert:

a1 = [[NSMutableArray alloc] init];

Objekte werden zu a1 hinzugefügt mit [a1 insertObject:[NSNumber numberWithInt:0] atIndex: 0 ];

Danach speichere ich den Kontext ab. Beim Zurückladen des Kontexts werden alle in a1 gespeicherten Elemente gespeichert und geladen. ALL WORKS WELL!

Wenn sich jedoch a1 ändert, indem beispielsweise ein weiteres Element zu a1 hinzugefügt oder ein beliebiges Element innerhalb von a1 geändert wird, und der Kontext gespeichert und wieder geladen wird, bleibt der Inhalt von a1 UNVERÄNDERT (er bleibt genau so, wie er war, bevor alle Änderungen stattfanden). CHANGES DON'T WORK!

Übrigens: Während die Anwendung läuft, werden alle Änderungen an a1 in a1 GESPEICHERT.

Bitte, können Sie mir helfen - was ist hier los?

Herzlichen Dank für Ihre Hilfe!

20voto

Marcus S. Zarra Punkte 46405

Änderungen innerhalb Ihres Arrays werden nicht funktionieren, da Core Data nicht in das Array sehen kann.

Die kurze Antwort lautet Tun Sie das nicht . Dies ist kein Grund, jemals ein Array (oder ein Wörterbuch) in Core Data zu speichern.

Erstellen Sie eine neue Entität in Core Data und legen Sie eine Beziehung an. Wenn die Reihenfolge wichtig ist, fügen Sie ein Ordnungsattribut in die untergeordnete Tabelle ein.

Speichern Sie Arrays nicht als binäre Objekte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X