(NSFetchedResultsController): no pudo leer el file de caching para actualizar las marcas de time de la información de la tienda

Actualicé mi proyecto a Xcode 8. Ahora obtengo este logging de errores con la combinación Xcode 8 y iOS 10.

Establecer el nombre de caching en el código siguiente parece arreglarlo.

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:@"myCache"]; 

¿Qué debo hacer para deshacerme de este logging de errores y usar caching en mi FRC?

Este error no debe ignorarse porque puede causar locking de la aplicación. Está relacionado con un error en el iOS 10 de las fugas de descriptor de files. Hay informes sobre openradar y Apple Bug Reporter.

Qué sucede: si carga un controller de vista utilizando NSFetchedResultsController con un nombre de caching no nulo, cada vez que guarda el context de object gestionado, abrirá uno o más descriptores de file que apunten al file de caching de información de sección del fetchedResultsController. Esto significa que si guarda el context 255 veces, alcanzará el número máximo de files que se pueden abrir en los dispositivos y no se abrirán nuevos resources, lo que provocará el fracaso de cualquier apertura posterior de files xib, imágenes, database, etc.

El problema también ocurre con las aplicaciones que ya están en producción (creadas con xcode 7) en dispositivos actualizados a iOS 10.

Una solución temporal está deshabilitando el almacenamiento en caching NSFetchedResultsController con nil como cacheName:

 NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:nil]; 

Obviamente de esta manera no podemos aprovechar el almacenamiento en caching. Espero que Apple solucione el error lo antes posible. Voy a probar contra 10.2 beta 1.

RADAR ABIERTO 28361550

EDIT En iOS 10.2 beta 1 el error no ocurre: se ha resuelto (por ahora).

La primera vez que estoy ofreciendo una respuesta aquí, pero aquí va …

Experimenté este error y encontré una resolución para mi caso particular.

Estaba usando un NSFetchedResultsController . Luego volví para agregar Restauración Estatal. Este error comenzó a aparecer luego de la restauración. Cuando utilicé la barra de navigation para volver a un controller de vista anterior, todos los datos faltaban o eran incorrectos.

Al leer los documentos de NSFetchedResultsController , descubrí lo siguiente:

Importante

Un delegado debe implementar al less uno de los methods de delegado de seguimiento de cambios para que se habilite el seguimiento de cambios. Proporcionar una implementación vacía de controllerDidChangeContent(_:) es suficiente.

Simplemente implementé un controllerDidChangeContent(_:) como se indicó. Ahora, todo funciona bien y el post de error de la pregunta desaparece. Para ser claro, simplemente agregué el siguiente código en cada controller de vista con un controller de resultados extraído:

 // NSFetchedResultsController change tracking methods func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { // empty: see documentation } 

Espero que esto ayude.

Después de prestar más atención al post de error anterior, pude ver que su aplicación estaba creando una gran cantidad de descriptores de file, abriendo files en una carpeta de caching y nunca cerrando o liberándolos. Por lo tanto, es mejor desactivar el almacenamiento en caching NSFetchedResultsController por ahora.

Hope Apple solucionará el problema