2013-01-22 8 views
6

Sto usando il framework Magical Record per salvare le impostazioni dell'utente. Ora, per la prima volta, voglio salvare le cose in un thread in background. A pagina GitHub Magical Record è un frammento di esempio non capisco pienamente:Magical Record save in background

Person *person = ...; 
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 

    Person *localPerson = [person MR_inContext:localContext]; 

    localPerson.firstName = @"John"; 
    localPerson.lastName = @"Appleseed"; 

}]; 

Perché è la prima linea di bisogno? Non posso creare completamente la Persona nel blocco? Grazie!

risposta

12

Certo che puoi. Questo esempio prende un oggetto person dal contesto esterno (quello predefinito o qualsiasi altro) e fornisce un puntatore ad esso nel localContext in modo da poterlo aggiornare in background. Se si dovesse creare una person da zero si potrebbe fare qualcosa di simile:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 

    Person *localPerson = [Person MR_createInContext:localContext]; 

    localPerson.firstName = @"John"; 
    localPerson.lastName = @"Appleseed"; 

}]; 

E il gioco è fatto.

PS. Si noti che MR_createInContext: è un metodo di classe richiamato nella classe Person (anziché il metodo di istanza MR_inContext: richiamato nell'istanza person).

+0

come la vedo io, il metodo che ho scritto sopra sembra essere deprecato, quale metodo devo usare per salvare in background? Ci sono un paio di metodi "nuovi" elencati, ma nessuno di loro ha "sfondo" nel suo nome. – Linus

+0

@LinusAn Dipende dalla versione di MagicalRecord che si utilizza. Puoi controllare i loro [github repo qui] (https://github.com/magicalpanda/MagicalRecord) (credo 'saveWithBlock:' è il metodo analogo in v3.x) – Alladinian

+0

Ah grazie mille! Allora userò quello. Non sapevo che la V3 fosse ancora disponibile, è meglio avere la versione più recente. – Linus

1

Sì, è possibile creare la Persona anche nel blocco. Il metodo inContext: è necessario solo se recuperi ad esempio una persona da un contesto diverso. Attenzione, se crei la Persona nel blocco, dovresti usare il metodo createInContext :.

0

Il salvataggio e il recupero dei record magici sono basati sul contesto. Pertanto, è possibile creare un record nel contesto predefinito o creare record in un nuovo contesto utilizzando il metodo MR_createInContext. Ma, mentre recupera i record, il contesto dovrebbe essere lo stesso di quello che hai creato.

http://pthiaga.blogspot.in/2014/11/running-database-fetch-core-data-in.html