No estoy seguro si esto es un problema con la forma en que Magical Record guarda, o simplemente estoy cometiendo un error novato en alguna parte.Magical Record, saving, and NSFetchedResultsController
Estoy usando NSFetchedResultController (FRC) y UITableView para mostrar una lista de entidades, cuando el usuario toca "Agregar" se empuja un nuevo Controlador de Vista con un editor, se crea una nueva entidad con [MyEntity MR_createEntity]
. El usuario puede agregar entidades adicionales aquí que se agregan a la entidad principal a través de una relación. Cuando el usuario toca "Guardar" en este Controlador de Vista, el contexto se guarda usando [[NSManagedObjectContext MR_contextForCurrentThread] MR_save]
Parece que NSFetchedResultsController se actualiza, pero cuando toco para editar la entidad, ninguna de las entidades secundarias está ahí. La depuración parece mostrar que, aunque la entidad se ha guardado, FRC todavía tiene la entidad con su ID temporal.
Estoy haciendo una ingenua [self.tableView reloadData]
en el método delegado FRC controllerDidChangeContent
.
Al reiniciar la aplicación se cargan las entidades correctas y las entidades secundarias se muestran correctamente en el controlador de vista del editor.
Parece que el FRC responde al evento de salvar "hilo principal", pero el guardado realmente está sucediendo en un hilo de fondo para que el FRC no lo vea. He verificado y todas las operaciones "mías" (configuración de FRC, creación y recuperación de entidades) están sucediendo en el contexto del hilo principal.
Intenté escuchar las notificaciones de cambio en MR_rootSavingContext y fusionarlas con el contexto del subproceso principal, que funcionó pero terminé con filas duplicadas en el FRC (una era la entidad correcta "permanente" y una era la temporal)
tengo un problema similar donde puede encontrar http://stackoverflow.com/questions/11212702/nspredicate-not-executed por desgracia no sé lo que lo está causando, pero también tengo la misma situación en la que parece que mi contexto predeterminado no está realmente actualizado (en cierto sentido). –
Yo también, y acabo de comentar el problema de Fabiano. El uso de MR_rootSavingContext no parece ayudarme, y puedo usar una versión anterior de MR, que sé que funciona. –
+1 porque esto solucionó mi problema, ver mi respuesta a http://stackoverflow.com/questions/11212702/nspredicate-not-executed/11407413#comment15080320_11407413 – Otto