Tengo una aplicación que utiliza una vista de tabla para mostrar una lista de elementos formar mis datos básicos. Estoy usando una API remota y estoy actualizando mi contenido después de bajar la vista de tabla, esto desencadena una llamada a la API.NSFetchedResultsController excepción delegado
se recuperan los datos, analiza y se inserta/modificada en mi Core Data.
Soy a veces recibiendo un error después de guardar mi contexto de Datos Core ... Tenga en cuenta que no estoy usando múltiples hilos para esto y como dije, parece que no siempre sucede.
Literalmente me estoy volviendo loco. Parece que este tipo tiene un problema similar, pero sigo siendo incapaz de fijar la mina con su solución: CoreData error driving me crazy... CoreData: Serious application error. An exception caught from delegate of NSFetchedResultsController
Aquí está el error completo:
2012-07-31 14:14:47.332 MyApp[2893:11303]
*** Assertion failure in -[_UITableViewUpdateSupport _setupAnimationsForNewlyInsertedCells],
/SourceCache/UIKit_Sim/UIKit-1914.84/UITableViewSupport.m:1133
2012-07-31 14:14:47.332 MyApp[2893:11303] CoreData: error: Serious application error.
An exception was caught from the delegate of NSFetchedResultsController during a call to -
controllerDidChangeContent:.
Attempt to create two animations for cell with userInfo (null)
ACTUALIZACIÓN:
tengo un predicado en mi solicitud de búsqueda. Para parecer que se están eliminando objetos descargados previamente de la API y que faltan en el nuevo resultado de JSON. Estoy configurando un indicador hideFromUser, esto se guarda en mis datos principales.
Si esta bandera es sí, entonces no aparece en la vista de tabla. Pero si está bien, entonces sí. También estoy actualizando información sobre ese objeto administrado si algo cambiara. ¿Es posible que tenga un objeto que estaba previamente configurado para ocultar ... y ahora está configurado para mostrarse, y también tenía algunos datos nuevos, podría esto desencadenar una "célula debería actualizarse" y una "célula debería insertar"?
más lo pienso menos parece ser relevante.
Así es como estoy actualizando mis datos:
1) configurar todos los objetos relevantes del tipo correspondiente a "ocultar formulario de usuario" (NSPredicate asegura que no se muestran en la Tabla).
2) me sale un NSArray partir de los datos JSON.
3) Colocando cada elemento en bucle, mi createABookOfClass: withJSON: el método consulta los datos básicos de un libro (utilizando una ID del diccionario json); si no lo encuentra, crea uno nuevo. Nota: en este punto se revierte el "ocultar del indicador de usuario".
4) Después de todo se hace, salvo.
[[DPLocalStore getInstance] hideFlagItemsOfType:NSStringFromClass([MyFavouriteBook class])];
NSArray * itemsJSON = [data mutableObjectFromJSONData];
[itemsJSON enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) {
[[DPLocalStore getInstance] createABookOfClass:[MyFavouriteBook class]
withJSON:obj];
}];
NSError *error = nil;
BOOL didsave = [[DPLocalStore getInstance] save:&error];
Tal vez lo que está sucediendo es un objeto de celda que contiene A se ha actualizado, es la actualización: ocultar la bandera ha cambiado. así me estoy metiendo en una situación en la que el delegado del NSFetchedResultsController quiere actualizar esa celda, y eliminarla también ... ya que el predicado ahora no corresponde a este objeto ... Ese sonido muy probablemente ...
¿Puede publicar el código donde inserta/actualiza los datos? –
Realmente es simple el análisis de una matriz json y la creación de un conjunto de nsmanagedobjects, después del ciclo guardo el contexto. Nada especial está ocurriendo aquí. ¿Tal vez si le doy acceso a mi repositorio BitBucket? Tal vez estas dos animaciones para una célula ... Solo tuve un pensamiento, por favor revise mi pregunta actualizada. Gracias. – Daniel
Het Martin, debería haber publicado un código más como el que dijiste, verifica mi respuesta. Aclamaciones. – Daniel