Paso algunos datos de NSManagedObject entre dos subprocesos usando NSOperationQueue con nivel de concurrencia a un máximo de 1 y me gustaría recibir algunas sugerencias sobre si lo estoy haciendo correctamente.NSOperation y CoreData Threading
Dado que NSManagedObject no es seguro para subprocesos, estoy enviando el NSManagedObjectID desde ThreadA (hilo principal) a ThreadB a través de una clase derivada de NSOperation. El flujo general de trabajo:
ThreadA (hilo principal):
- crea NSPersistentStoreCoordinator
- crea principal NSManagedObjectContext (1)
crea NSManagedObjectContext (2) para su uso en WorkerThread
crea MyNSOperationItem, pasa a lo largo de NSManagedObjectContext y agrega MyNSOperationItem a NSOperationQueue
ThreadB (rosca de NSOperationQueue):
clase derivada
- NSOperation será recuperar datos de la persistente
tienda utilizando el IDobjeto suministrado.
Mi clase NSOperation se ve así:
@interface MyNSOperationItem: NSOperation
{
// MyNSOperationItem is created in thread1 and MOC will be
// set on creation
NSManagedObjectContext *threadedMOC;
NSManagedObjectID *workItemObjectID;
}
@end
Así que está bien para mi NSOperation clase derivada de tener una referencia a NSManagedObjectContext o debería almacenar la segunda NSManagedObjectContext otra parte? Como se trata de una cola, se crearán numerosas instancias de MyNSOperationItem, cada una de ellas apuntando al mismo NSManagedObjectContext.
El enlace hace referencia a una aplicación de muestra llamada 'BackgroundFetching' en '/ Developer/Examples/CoreData' - no existe tal directorio en mi máquina. ¿Alguna idea sobre dónde encontrar esa muestra? –
Sí. Tienes razón. Y tampoco parece estar disponible en el sitio de desarrollo tampoco. No estoy seguro de lo que es el trato. Podría presentar una falla de documentación con Apple que señale la información desactualizada. Quizás lo actualicen con una nueva ruta o enlace. Por otra parte, tal vez lo actualicen y eliminen la ruta/enlace por completo. Lo siento por eso. –