Simultaneidade dos dados principais `performBlockAndWait:` NSManagedObjectContext zombie

Eu tenho um seguinte relatório de falha do meu aplicativo lançado:

synchronizeMyWords O método busca as entidades do banco de dados, cria o contexto da fila privada com o pai do contexto principal e, finalmente, salva os resultados. Todas as operações estão no encadeamento em segundo plano. Esse método é chamado toda vez que o aplicativo entra embackground eforeground. Aqui está um 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 você vê, eu estou usandoRegistro Mágico Biblioteca de terceiros para gerenciar a pilha de dados principais. Aqui está um método de criação de contexto de fila privada:

+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext
{
    NSManagedObjectContext *context = [self MR_newPrivateQueueContext];
    [context setParentContext:parentContext];
    [context MR_obtainPermanentIDsBeforeSaving];
    return context;
}

Você pode verificar o todoNSManagedObjectContext+MagicalRecord categoria no githubaqui.

Como está disponível quecontext objeto dentroperformBlockAndWait: lançado antes de escapar do escopo? Pessoalmente, não consigo reproduzir a falha, mas muitos dos meus usuários (dispositivos iOS 8.1-10) são afetados por esse problema.

ATUALIZAÇÃO 1:

Aqui está, por exemplo, o mesmo relatório sobreblogue

questionAnswers(2)

yourAnswerToTheQuestion