2012-02-08 21 views
9

Estoy insertando una nueva entidad de carpeta en el contexto de mi objeto modelo (MOC), que es un elemento secundario del MOC maestro. Antes de guardar, [[newFolder objectID] isTemporaryId] devuelve SÍ. Cuando guardo primero mi MOC y luego el maestro MOC y le pregunto a [[newFolder objectID] isTemporaryId], nuevamente dice SÍ. Esperaba que ahora fuera un objeto persistente, y de hecho, si interrogo al archivo SQLite, contiene la nueva carpeta. Durante todo el tiempo de mi aplicación en ejecución, dirá SÍ. No antes de cerrar y reiniciar, y así cargar el objeto desde la tienda, ¿dice NO?¿Cuándo obtiene un objeto un ID de objeto que no es temporal?

Siempre pensé que un NSManagedObject cambió de un objeto temporal a un objeto almacenado que ya no era un ID de objeto temporal cuando se guardó. ¿Cuándo un objeto obtiene un objectID que no es temporal?

Saludos

Nik

+1

Probablemente debería agregar que no puedo usar "NSManagedObject * obj = [MOC existingObjectWithID: oid error: & error];" donde oid es el ID de objeto (aún temporal) de la carpeta recién insertada y guardada – niklassaers

+0

Hasta ahora, la única manera útil de salir de esto es realizar un seguimiento de un disco guardado con [reinicio self.masterMOC]; – niklassaers

Respuesta

13

objetos en contextos niño no son alterados por los cambios en el contexto de los padres hasta que los objetos se actualizan. Quizás refrescar el objeto después de guardar el contexto principal hará el truco.

Si eso no funciona, siempre hay -[NSManagedObjectContext obtainPermanentIDsForObjects:error:].

+2

Es el niño el que cambia, no el padre. Luego, el niño se guarda primero, luego el padre. Gracias por el truco con obtenerPermanentIDsForObjects. Pero aún me gustaría saber por qué la ID del objeto no se actualiza. – niklassaers

+0

Entiendo que cambie el objeto, guarde el contexto secundario y luego guarde el contexto primario. Cuando guarda el contexto secundario, no obtiene una identificación permanente; Teorizo ​​que cuando guardas el contexto principal, eso solo afecta el contexto principal, por lo que el contexto secundario no ve el ID permanente. Si es verdadero, actualizar el objeto debe obligar al contexto secundario a obtener la nueva ID del padre. –

+3

¿De qué manera recomendarías refrescar el objeto? Cuando se utiliza la ID temporal para objectID, existingObjectWithID: error: devuelve un error y objectWithID: le da el mismo objeto con la misma ID temporal. Incluso después de que se guardan tanto el hijo como el padre. restablecer el MOC padre resuelve esto, pero esa es una resolución muy costosa. – niklassaers

Cuestiones relacionadas