1

Ich arbeite mit Kerndaten. Ich möchte ein verwaltetes Objekt bei wenigen Ereignissen meiner Anwendung aktualisieren. Dieses verwaltete Objekt wird beim Start der App entweder erstellt oder abgerufen (falls vorhanden). Ich weiß, dass das verwaltete Objekt nicht threadsicher ist, deshalb speichere ich das verwaltete Objekt nicht im Speicher, sondern speichere objectID, da es threadsicher ist. Ich speichere die objectID, sobald das Objekt erstellt und im Kontext gespeichert, so bin ich sicher, dass die gespeicherte Objekt-ID dauerhaft und nicht vorübergehend ist.Abrufen von managedObject mit allen Werten nil, mit objectWithID

Auf den Veranstaltungen, bei denen ich mein Objekt aktualisieren möchte ich folgenden Code haben:

self.managedObjectContext.performBlock { 
    let myObject = self.managedObjectContext.objectWithID(objectId) as! MyClass 
    myObject.property = myValue 
    self.managedObjectContext.save() 
} 

Dies funktioniert die meiste Zeit in Ordnung, aber es gibt einige Fälle, in denen ich das Objekt bin immer self.managedObjectContext.objectWithID(objectId) verwenden, aber alle es ist Eigenschaften sind null, sollte dies nicht geschehen, weil das Objekt bereits im Kontext erstellt und gespeichert wurde.

Kann jemand mich auf die Gründe des Erhaltens des Gegenstandes mit Nulleigenschaftswert verweisen?

Der einzige Grund, den ich kenne, ist während des Aufrufs der objectWithID-Methode mit temporärer ObjectID, aber das ist in meinem Fall nicht wahr, da ich nur permanente ObjectID verwende.

Antwort

0

Wenn Sie für alle Werte nil zurück erhalten, bedeutet dies, dass das Objekt vor Ihrem letzten Zugriff gelöscht wurde.

Sehen Sie sich das Core Data-Video von WWDC 2015 an. Dieses Verhalten wurde eingeführt, um Probleme zu vermeiden, wenn Sie einen Verweis auf eine gelöschte NSManagedObject halten.

Verwandte Themen