La migration de datos de iPhone Core conduce a la pérdida de datos binarys cuando se permite el almacenamiento externo seleccionado

Estoy tratando de agregar un nuevo model. El nuevo model tendrá una nueva entidad y una relación de una entidad actual a la nueva. He creado el nuevo model y lo he configurado como actual. Aunque todo funciona bien y puedo acceder a la nueva entidad, algunas inputs de "datos binarys" son nulas.

Intenté agregar un model de mapeo y luego migrar, pero los resultados son los mismos. Los 'datos binarys' almacenados son UIImage. Algunas miniaturas pequeñas se están migrando. Ninguno de los files UII de tamaño completo se está migrando.

Estoy pensando que tal vez las entidades que se almacenan automáticamente de forma externa (debido a su tamaño) no se están migrando.

ACTUALIZAR

Construyo un pequeño proyecto que almacena collections de imágenes. Intenté crear un nuevo model y todo funcionó bien. Luego comparo el nuevo proyecto con el anterior y la única diferencia fue "Permitir almacenamiento externo". Seleccioné esta opción en el nuevo proyecto, creé un nuevo model y faltaron las imágenes.

Estoy pensando que tal vez las entidades que se almacenan automáticamente de forma externa (debido a su tamaño) no se están migrando.

Eso es exactamente lo que sucede. Es un error de Apple. Los datos básicos de un determinado tamaño son almacenados por Core Data en una carpeta de soporte externa dentro de la carpeta Documents. Por alguna razón, durante una migration, Core Data simplemente borra esa carpeta de almacenamiento externo, ¡gulp! Por lo tanto, los datos de imágenes en miniatura migran bien, ya que no se almacenan externamente en el DB de SQLite, pero los files binarys externos más grandes solo se eliminan.

La solución que he encontrado es cuando su código inicializa un coordinador de tienda persistente para que su model de Core Data ejecute algunas comprobaciones antes de intentar la migration automática. Verifique si el nuevo model es compatible con el model almacenado actual. Si no es así, sabrá que Core Data está a punto de migrar su viejo model a su nueva versión y al hacerlo borrará la carpeta de almacenamiento externo. Antes de hacerlo, simplemente mueva la carpeta de almacenamiento externo a una location temporal. Una vez que la migration ha finalizado, reemplace la nueva carpeta de almacenamiento externa vacía generada por Core Data.

He documentado la solución completa con el código fuente en esta publicación del blog:

http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/