El tamaño de lote no funciona cuando se usan contextos padre / hijo
He podido confirmar esto en mi aplicación, y una aplicación de muestra rápida que creé para confirmarlo. Aquí está la configuración:
Tienes dos contextos de objetos gestionados:
masterMOC: NSPrivateQueueConcurrencyType, tied to persistent store coordinator
mainMOC: NSMainQueueConcurrencyType, child of masterMOC, NOT tied to any store coordinator
Esta configuración se inspiró en el video de la WWDC, que sugiere que podemos guardar en un hilo de fondo configurandomasterMOC
a una cola privada y vincularlo a la tienda persistente. Si configura unNSFetchedResultsController
utilizando lamainMOC
(y debe ser elmainMOC
ya que es el que está vinculado a la interfaz de usuario), y establecer unfetchBatchSize
, el tamaño del lote se ignora y todas las entidades tienen fallas al mismo tiempo. Permití las anotaciones de depuración de SQLite, y cuando me desplazo a través de miles de filas (con un tamaño de lote de 20), no se disparan fallas.
Si hago un ajuste simple, es decir, atar el coordinador de tienda persistente almainMOC
y conviértalo en un contexto raíz (es decir, ya no es un hijo del maestro), entonces el tamaño del lote funciona perfectamente, y cuando me desplazo a través de miles de filas, se disparan varias fallas.
¿Es este el comportamiento esperado? ¿Me estoy perdiendo de algo?
Puedes descargar el proyecto de muestra.aquí