NSManagedObject hat die Eigenschaften nach dem Speichern geändert

8

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.

    
JPC 18.11.2011, 00:23
quelle

3 Antworten

7

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.

Update # 2

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.

Aktualisieren

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.

    
Marcus S. Zarra 18.11.2011 00:59
quelle
1

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.

Ссылка

    
Davyd 18.11.2011 00:35
quelle
1

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?

    
JPC 20.11.2011 21:42
quelle