Tengo un problema donde estoy actualizando una relación muchos a muchos en un subproceso en segundo plano, que funciona bien en esa amenaza, pero cuando envío el objeto a la principal enhebrar los cambios no se muestran Si cierro la aplicación y vuelvo a abrir, la información se guarda bien y los cambios se muestran en el hilo principal. También el uso de [bloqueo de contexto] en lugar de un contexto diferente de objeto administrado funciona bien.Sincronización de subproceso de contexto de objeto gestionado Datos principales
He tratado NSManagedObjectContext:
- (BOOL)save:(NSError **)error;
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;
en diferentes etapas a lo largo del proceso, pero no parece ayudar.
Mi código de datos núcleo utiliza la siguiente getter para garantizar las operaciones son seguros hilo:
- (NSManagedObjectContext *) managedObjectContext
{
NSThread * thisThread = [NSThread currentThread];
if (thisThread == [NSThread mainThread])
{
//Main thread just return default context
return managedObjectContext;
}
else
{
//Thread safe trickery
NSManagedObjectContext * threadManagedObjectContext = [[thisThread threadDictionary] objectForKey:CONTEXT_KEY];
if (threadManagedObjectContext == nil)
{
threadManagedObjectContext = [[[NSManagedObjectContext alloc] init] autorelease];
[threadManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCoordinator]];
[[thisThread threadDictionary] setObject:threadManagedObjectContext forKey:CONTEXT_KEY];
}
return threadManagedObjectContext;
}
}
y cuando paso objeto entre los hilos que estoy usando
-(NSManagedObject*)makeSafe:(NSManagedObject*)object
{
if ([object managedObjectContext] != [self managedObjectContext])
{
NSError * error = nil;
object = [[self managedObjectContext] existingObjectWithID:[object objectID] error:&error];
if (error)
{
NSLog(@"Error makeSafe: %@", error);
}
}
return object;
}
Cualquier ayuda apreciado
Editar: Extrañaba que estuviera usando threadDictionary anteriormente. – Wendel