2015-04-07 6 views
5

Sto utilizzando i dati principali per archiviare e recuperare i miei dati, ma sto affrontando qualche problema. Voglio utilizzare due thread paralleli per le seguenti operazioni:Utilizzare più oggetti gestiti contesto con base dati principale

  1. Il thread uno inserirà i dati nella tabella di base CoreData (A).
  2. Il thread due recupera i dati da un'altra tabella (B).

Come posso farlo?

Ho fatto qualche ricerca su google e hanno detto che è necessario utilizzare più contesti oggetto gestito, ma non so come lo useremo.

+0

Perché si vuole utilizzare due fili in parallelo? – andrewbuilder

+0

Un singolo coordinatore dell'archivio permanente gestirà il processo di inserimento dei dati nella tabella A e recupererà i dati dalla tabella B. Non è necessario che due contesti degli oggetti gestiti funzionino correttamente. È tuttavia possibile creare un thread privato per gestire il processo di persistenza (ad esempio il salvataggio dei dati) in modo da non bloccare l'interfaccia utente. – andrewbuilder

risposta

15

Non si deve accedere a NSManagedObjectContext su più thread. Il NSManagedObjectContext creato in AppDelegate dovrebbe essere accessibile solo sul thread principale.

Ciò implica, è necessario creare un NSManagedObjectContext per ogni thread che si crea. Assicurati di impostare il contesto genitore di NSManagedObjectContext del thread come contesto principale.

Esempio: -

NSManagedObjectContext *mainContext; // = getMainContext 
NSManagedObjectContext *threadContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
threadContext.parentContext = mainContext; 

e quindi utilizzare threadContext sul filo ...

si può proseguire il UI relative recupero sul thread principale. O se è essenziale avere anche un altro thread, crea anche un contesto.

di conoscere la concorrenza Core Data in profondità vedere a tutorial

Impostazione rapporto contesto padre/figlio si fonderanno contesto del tuo thread con il contesto principale (è contesto genitore).

Per comprendere relazione padre/figlio contesto check this URL

o appena sotto questo diagramma -

Parent/Child context relationship.

crediti verso l'URL dell'articolo ...

+0

Sì, è necessario utilizzare più contesto oggetto gestito per i thread. La mia preoccupazione è che quando userò threadContext per i miei altri thread e poi come aggiornerò il mio principale oggetto object context, perché ho letto in tutorial, dobbiamo aggiornare il contesto thread principale dopo l'inserimento o l'aggiornamento della tabella del database dal contesto del thread. –

+0

Gentilmente controlla le mie modifiche .... –

+0

@Mayur Deshmukh Come funziona il modello figlio genitore quando voglio recuperare un numero elevato di record. –