Concurrencia de datos principales `performBlockAndWait:` NSManagedObjectContext zombie
Tengo un siguiente informe de bloqueo de mi aplicación lanzada:
synchronizeMyWords
El método recupera las entidades de la base de datos, crea un contexto de cola privado con el contexto principal principal y finalmente guarda los resultados. Todas las operaciones están en el hilo de fondo. Este método se llama cada vez que la aplicación entrabackground
yforeground
. Aquí hay un método simplificado:
- (AWSTask *)synchronizeMyWords {
__weak typeof(self) weakSelf = self;
AWSContinuationBlock block = ^id _Nullable(AWSTask * _Nonnull task) {
if ([task.result isKindOfClass:[NSArray class]]) {
NSArray * records = (NSArray *)task.result;
NSManagedObjectContext * context = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
[context performBlockAndWait:^{
for (NSDictionary * info in records) {
[RDRWord MR_createEntityInContext:context];
}
[context save:nil];
}];
return [AWSTask taskWithResult:@YES];
}
return [AWSTask taskWithError:[NSError errorWithDomain:@"" code:404 userInfo:nil]];
};
AWSExecutor * executor = [AWSExecutor defaultExecutor];
return [[self loadLocalWords] continueWithExecutor:executor withBlock:block];
}
Como veis estoy usandoRegistro mágico Biblioteca de terceros para administrar la pila de Core Data. Aquí hay un método para crear contexto de cola privada:
+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext
{
NSManagedObjectContext *context = [self MR_newPrivateQueueContext];
[context setParentContext:parentContext];
[context MR_obtainPermanentIDsBeforeSaving];
return context;
}
Puedes consultar todoNSManagedObjectContext+MagicalRecord
categoría en githubaquí.
¿Cómo está disponible quecontext
objeto dentroperformBlockAndWait:
lanzado antes de que se escape del alcance? Personalmente no puedo reproducir el bloqueo, pero muchos de mis usuarios (dispositivos iOS 8.1 - 10) se ven afectados por este problema.
ACTUALIZACIÓN 1:
Aquí está, por ejemplo, el mismo informe sobreBlog