Sto passando alcuni dati NSManagedObject tra due thread utilizzando NSOperationQueue con livello di concorrenza a un massimo di 1 e vorrei alcuni suggerimenti sul fatto che sto facendo correttamente questo.Threading NSOperation e CoreData
Poiché NSManagedObject non è thread-safe, sto inviando l'NSManagedObjectID da ThreadA (thread principale) a ThreadB tramite una classe derivata NSOperation. Il flusso generale di lavoro:
ThreadA (thread principale):
- crea NSPersistentStoreCoordinator
- crea principale NSManagedObjectContext (1)
crea NSManagedObjectContext (2) per l'uso in workerThread
crea MyNSOperationItem, passa lungo NSManagedObjectContext e aggiunge MyNSOperationItem a NSOperationQueue
ThreadB (Il filo di NSOperationQueue):
- NSOperation classe derivata recupererà i dati dal persistente
negozio utilizzando l'objectID in dotazione.
La mia classe NSOperation si presenta così:
@interface MyNSOperationItem: NSOperation
{
// MyNSOperationItem is created in thread1 and MOC will be
// set on creation
NSManagedObjectContext *threadedMOC;
NSManagedObjectID *workItemObjectID;
}
@end
Quindi è bene per la mia NSOperation classe derivata di avere un riferimento a NSManagedObjectContext o devo conservare il secondo NSManagedObjectContext altrove? Poiché si tratta di una coda, sono state create numerose istanze di MyNSOperationItem, ciascuna delle quali punta allo stesso NSManagedObjectContext.
Il collegamento ha fatto riferimento a un'app di esempio chiamata "BackgroundFetching" in "/ Developer/Examples/CoreData" - nessuna directory di questo tipo esiste sul mio computer. Qualche idea su dove trovare quel campione? –
Sì. Hai ragione. E non sembra essere più disponibile sul sito di sviluppo. Non sono sicuro di quale sia l'affare. È possibile presentare un bug di documentazione con Apple che indica le informazioni non aggiornate. Forse lo aggiorneranno con un nuovo percorso o collegamento. Poi di nuovo, forse lo aggiorneranno e rimuoveranno del tutto il percorso/collegamento. Mi dispiace per quello –