2010-06-16 13 views
7

Ich speichere eine NSMutableArray in einer transformierbaren Eigenschaft in meinem Core Data Store. Ich kann das Element ordnungsgemäß mit Daten in der NSMutableArray erstellen und dann aus der Eigenschaft laden und sogar Änderungen vornehmen. Wenn ich meine App durchsuche und wieder darauf zugreife, werden meine Änderungen gespeichert. Wenn ich die App neu lade, wurden die Änderungen jedoch nicht im Hauptdatenspeicher gespeichert. Andere Änderungen an der Einheit - z.B. Ändern seines Titels, der als NSString gespeichert wird - werden gespeichert, auch wenn ich die App beende und wieder öffne.Core Data speichert keine Änderungen an der transformierbaren Eigenschaft

Ich lese in another StackOverflow question, dass transformierbare Attribute nicht automatisch über Änderungen benachrichtigt werden, und dass ich "den entsprechenden Setter vor dem Speichern" aufrufen müsste. Aber selbst mit den eigentlichen Setter-Funktionen - ich habe auch versucht, didChangeValueForKey aufrufen - die Eigenschaft wird nicht ordnungsgemäß gespeichert. Irgendwelche guten Ideen?

Antwort

6

Sie müssen, wie Sie feststellen, „neu eingestellt“, um eine wandelbare Eigenschaft:

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

Es gibt keine Möglichkeit, dass Kerndaten in geeigneter Weise ein beliebiges umwandelbar Objekt überwachen könnten, so dass es könnte das Richtige zu tun 'automatisch.

Darüber hinaus müssen Sie sicher sein, dass Sie tatsächlich den Objektkontext verwaltet speichern, nachdem Sie das wandelbare Attribut ändern:

NSError *error; 
if(![[myManagedObject managedObjectContext] save:&error]) { 
    //present error 
} 

Während eines einzigen Durchlauf des Programms werden nicht gespeicherte Änderungen sichtbar angezeigt werden, da der Objektkontext verwaltet behält geänderte Instanzen im Speicher. Ohne den Kontext zu speichern, werden diese Änderungen jedoch nicht auf dem Datenträger gespeichert.

+5

gearbeitet habe ich dieses Problem mit NSMutableArrays als wandelbare Attribut erlebt, und ich war die entsprechenden Setter-Methoden Zugriff und Speichern der Kontext richtig (andere Attribute wurden immer als Beweis gespeichert). In meinem Fall bestand die Lösung darin, den Typ in ein NSArray umzuwandeln. – JoBu1324

+0

@ JoBu1324 Vielen Dank dafür, hat mich für immer zu begreifen, warum Sachen nicht korrekt gespeichert! – BluGeni

+0

@BluGeni Mein Vergnügen! – JoBu1324

0

Ich habe festgestellt, dass Sie nicht nur die Eigenschaft neu festlegen müssen. Aber Sie brauchen auch eine andere Instanz. Deshalb ist es nicht mit NSMutableArray

Transformable *copy = [managedObject.transformableProperty copy]; 

// do stuff 

managedObject.transformableProperty = copy; 
Verwandte Themen