O tamanho do lote não funciona ao usar contextos pai / filho

Consegui confirmar isso em meu aplicativo e um aplicativo de amostra rápido que criei para confirmar isso. Aqui está a configuração:

Você tem dois contextos de objeto gerenciado:

masterMOC: NSPrivateQueueConcurrencyType, tied to persistent store coordinator
mainMOC: NSMainQueueConcurrencyType, child of masterMOC, NOT tied to any store coordinator

Essa configuração foi inspirada no vídeo da WWDC, o que sugere que podemos economizar em um thread de segundo plano definindomasterMOC para uma fila particular e vinculá-la ao armazenamento persistente. Se você configurar umNSFetchedResultsController usando omainMOC (e deve ser omainMOC desde que esse é o único ligado à interface do usuário), e definir umfetchBatchSize, o tamanho do lote é desconsiderado e todas as entidades são criticadas de uma só vez. Eu habilitei as anotações de depuração do SQLite e, ao percorrer milhares de linhas (com um tamanho de lote de 20), nenhuma falha é disparada.

Se eu fizer um ajuste simples, ou seja, amarre o coordenador de armazenamento persistente aomainMOC e torná-lo um contexto raiz (ou seja, não é mais um filho do mestre), o tamanho do lote funciona perfeitamente e, à medida que rola milhares de linhas, várias falhas são disparadas.

Esse comportamento é esperado? Estou esquecendo de algo?

Você pode baixar o projeto de amostraAqui

questionAnswers(2)

yourAnswerToTheQuestion