Kann man nach dem Speichern herausfinden, welche Eigenschaften auf einem verwalteten Objekt gespeichert wurden? Ich habe zum Beispiel jemanden, der auf kontextsensitive Speicherobjekte wartet (NSManagedObjectContextDidSaveNotification) und möchte wissen, welche Eigenschaften auf den Objekten gespeichert wurden.
NSManagedObjectContextDidSaveNotification
enthält alle drei Informationen, die Sie für die Synchronisierung mit einem Server benötigen. Überprüfen Sie die [notification userInfo]
und Sie finden drei Mengen innerhalb: NSInsertedObjectsKey
, NSUpdatedObjectsKey
und NSDeletedObjectsKey
Wenn Sie wissen möchten, welche Eigenschaften sich in einer Entität geändert haben, müssen Sie sie mit KVO selbst verfolgen. Ich würde dagegen empfehlen, da die Chancen dieses Aufwands es wert sind, nur das gesamte Objekt auf einen Server zu schieben, sind schlank.
Weiter herum stochern:
Von NSManagedObjectContextWillSaveNotification
könnten Sie jede Menge durchlaufen und auf die Methode changedValues
verweisen. Sie können einen Verweis auf dieses Wörterbuch beibehalten, bis Sie die NSManagedObjectContextDidSaveNotification
erhalten haben, und dann die Änderungen verarbeiten. Klingt immer noch sehr schwer für mich.
Was ist Ihr Endziel?!?!
Wenn Sie herausfinden möchten, was auf einen Server übertragen werden soll, ist die Attributstufe zu niedrig. Sie sollten auf Entitätsebene synchronisieren.
Wenn Sie nur versuchen, interne Konsistenz in Ihrer Anwendung zu behalten, dann denken Sie viel zu tief. Dies ist ein gelöstes Problem. Core Data löste es.
Warum holst du sie nicht, wenn sie gerettet werden? Abonnieren Sie NSManagedObjectContextWillSaveNotification und überprüfen Sie insertedObjects
, updatedObjects
und deletedObjects
von NSManagedObjectContext
.
Aktualisierung:
Noch einfacher, holen Sie sich die Benutzerinformationen von NSManagedObjectContextDidSaveNotification
Aus der Dokumentation:
Normalerweise registrieren Sie sich in Thread A für den Kontext des verwalteten Objekts Benachrichtigung speichern, NSManagedObjectContextDidSaveNotification. Wenn du Empfangen Sie die Benachrichtigung, das Benutzerinfo-Wörterbuch enthält Arrays mit den verwalteten Objekten, die eingefügt, gelöscht und aktualisiert wurden Thread B.
Hier ist die Lösung, mit der ich mich arrangiert habe. Ich habe eine Singleton-Klasse, die benachrichtigt wird, wenn ein Kontext gespeichert wird. Die NSManagedObjectContextWillSave-Benachrichtigung teilt mir mit, welche Dinge sich geändert haben, also speichere ich sie in einem Wörterbuch, wobei der Schlüssel der gespeicherte Kontext ist. Wenn ich dann die NSManagedObjectContextDidSave-Benachrichtigung abrufe, überprüfe ich das Wörterbuch für den zugehörigen Kontext. Schließlich entferne ich diesen Eintrag aus dem Wörterbuch. Scheint das vernünftig?
Tags und Links objective-c core-data nsmanagedobjectcontext nsmanagedobject