2013-03-21 9 views
9

Ich habe eine NSOperation-Unterklasse, die Daten in CoreData herunterladen und importieren.Welche MagicalRecord-Methode speichern

Sobald ich dies getan habe, möchte ich den Kontext speichern und es in den Standardkontext zusammenführen.

Die Speicherung erfolgt nicht in einem Block, sondern nur synchron, da es sich bereits in einem BG-Thread befindet.

Sobald ich die Änderungen vorgenommen habe, welche MR-Speichermethode sollte ich verwenden?

Es gibt Dutzende von ihnen und nicht wirklich sicher, was jeder tut.

Sollte ich ...

- (void)save: 
- (void)saveOnlySelfAndWait; 
- (void)saveToPersistentStoreAndWait; 

Oder sollte ich tun, um alle Änderungen in ...

+ (void)saveUsingCurrentThreadContext... 

ich es synchron sein wollen, so dass ich das Ende des Steuer kann Betrieb.

Zumindest könnte jemand die Unterschiede zwischen den verschiedenen Speichern erklären.

Antwort

14

Ich bestätige, dass diese Methoden nicht sehr gut dokumentiert sind. Sie folgen jedoch dem geschachtelten Core Data-Kontextmodell ziemlich gut.

  1. Mit MagicalRecord nicht verwenden save: auf einem NSManagedObjectContext. MagicalRecord hat all diese zusätzlichen Fehlerbehandlungs-, Protokollierungs- und Vervollständigungshandler eingebaut. Sie möchten diese verwenden.

  2. Sie scheinen zu wissen, wo Daten gehen müssen (von einem Kontext zum Stamm). Es hängt von Ihrer Hierarchie ab, welche Speichermethode Sie verwenden müssen. Wenn Sie nur eine Ebene tief sind (dh in einem Kindkontext des defaultContext), wird saveOnlySelfAndWait zu defaultContext speichern. Andernfalls durchläuft saveToPersistentStoreAndWait die Hierarchie für Sie bis zum Datenspeicher. Die Methoden blockieren Anrufe. Die Aufrufe mit Abschluss eines Handlers sind nicht. Diese sind ziemlich geradlinig in ihrer Verwendung.

+0

Perfekt! Danke noch einmal. AFAIK Ich erschaffe keine tiefe Hierarchie. Verwenden Sie einfach [NSManagedObjectContext contextForCurrentThread] in der NSOperation. Ich werde saveToPersistentStoreAndWait nur um sicher zu sein. Danke noch einmal. – Fogmeister

+0

@Fogmeister hast du das für dich arbeiten lassen? Ich versuche, in einer NSOperation zu speichern, und während ich keine Fehler erhalte, sind die Objekte einfach leer. – RyanJM

+0

@casademora was, wenn ich nur den defaultContext verwende? Ich benutze MagicalRecord und benutze einfach MR_defaultContext – onmyway133

Verwandte Themen