2013-03-21 10 views
9

Ho una sottoclasse NSOperation che sta scaricando e importando dati in CoreData.Quale metodo di salvataggio MagicalRecord

Una volta eseguita questa operazione, desidero salvare il contesto e unirlo nel contesto predefinito.

Il salvataggio non viene eseguito in un blocco, ma lo fa in modo sincrono poiché è già presente in un thread BG.

Una volta apportate le modifiche che dovrei usare il metodo di salvataggio MR?

Ce ne sono a dozzine e non sono proprio sicuro di quello che fanno.

Dovrei usare ...

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

O devo fare tutti i cambiamenti in ...

+ (void)saveUsingCurrentThreadContext... 

voglio che sia sincrono in modo che possa controllare la fine del operazione.

Almeno qualcuno potrebbe spiegare le differenze tra i diversi salvataggi.

risposta

14

Riconosco che questi metodi non sono documentati molto bene. Tuttavia, seguono il modello di contesto nidificato di Core Data abbastanza bene.

  1. Con MagicalRecord non usano save: su un NSManagedObjectContext. MagicalRecord ha tutti gli altri gestori di gestione errori, registrazione e completamento integrati. Si desidera utilizzarli.

  2. Sembra che tu sappia dove devono andare i dati (da un contesto alla radice). Dipende dalla tua gerarchia su quale metodo di salvataggio devi usare. Se il livello è solo ad un livello (ad es. In un contesto figlio dello predefinito ), lo saveOnlySelfAndWait salverà su defaultContext. Altrimenti, saveToPersistentStoreAndWait attraverserà la gerarchia per te, fino all'archivio dati.

  3. I metodi andWait bloccano le chiamate. Le chiamate con completamento di un gestore non lo sono. Questi sono abbastanza semplici nel loro uso.

+0

Perfetto! Grazie ancora. AFAIK Non sto creando nessuna gerarchia profonda. Basta usare [NSManagedObjectContext contextForCurrentThread] in NSOperation. Userò saveToPersistentStoreAndWait solo per essere sicuro. Grazie ancora. – Fogmeister

+0

@Fogmeister sei riuscito a far funzionare questo lavoro per te? Sto cercando di salvare all'interno di una NSOperation e mentre non ricevo errori, gli oggetti sono vuoti. – RyanJM

+0

@casademora e se uso solo il defaultContext? Io uso MagicalRecord e uso semplicemente MR_defaultContext – onmyway133

Problemi correlati