objective-c xcode core-data nsmanagedobjectcontext

objective c - ¿El contenido del contexto del objeto gestionado por el niño es siempre el mismo que el contenido de su padre?



objective-c xcode (2)

El niño tiene referencias existentes inválidas. Si desea que los hermanos estén sincronizados después del guardado principal, debe invalidar a los hijos con reset .

Después de reset llamada, todos los objetos gestionados del receptor se “olvidan”. Si utiliza este método, debe asegurarse de descartar las referencias a cualquier objeto gestionado que se haya obtenido con el receptor, ya que no serán válidos posteriormente.

También puede usar refreshObject:mergeChanges: en los objetos individuales modificados en todos los contextos secundarios al guardar el contexto primario si desea un control más refreshObject:mergeChanges: sobre los objetos modificados en los contextos secundarios.

¿Cómo actualizar el contexto del objeto gestionado por el niño para que tenga los mismos datos con el padre?

Que yo sepa, al ahorrar, el niño solo da un paso, es decir, a los padres. Sin embargo, cuando se recupera, siempre se profundiza hasta el almacén principal y persistente. Así que espero que las cosas sean iguales.

Sin embargo, no lo es.

Tengo un contexto de objeto administrado que es padre de todos los demás contextos de objeto administrado.

Un niño cambia los datos y los guarda. El padre también se cambia. Hago executeFetchRequest en el padre y veo que los datos cambian.

Sin embargo, algunos hijos de los padres todavía usan datos antiguos. Id. Del mismo objeto los mismos datos. De alguna manera el valor de la propiedad sigue siendo el mismo.

¿Cómo decirle al niño que vuelva a cargar los datos nuevos del padre?

Para ser mas exactos

Di P es el padre

Digamos que tiene C1 C2 C3 como niño

Entonces C1 cambia los datos y confirma. El cambio se propaga a P. Sin embargo, la ejecución de executeFetchRequest en C2 y C3 aún muestra datos antiguos.

¿Lo que da?

Por ejemplo, cuando compruebo la propiedad imageBlob, esto es lo que obtengo:

Niño:

2013-02-05 13:57:42.865 BadgerNew[78801:c07] imageBlob: <UIImage: 0x89c3c50> 2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null> 2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null> 2013-02-05 13:57:42.866 BadgerNew[78801:c07] imageBlob: <null>

Padre:

2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x114af650> 2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x8e492e0> 2013-02-05 13:57:42.868 BadgerNew[78801:c07] imageBlob: <UIImage: 0x114c79b0> 2013-02-05 13:57:42.869 BadgerNew[78801:c07] imageBlob: <UIImage: 0xa8c76e0>

Aquí hay una versión más completa por la que anoto el moc, el moc principal, el blob, la URL y el ID del objeto. Niño:

En particular, quiero que el contexto del objeto gestionado de la cola principal sea otro elemento secundario del elemento primario en lugar del elemento principal de todos los demás elementos de contexto de objeto gestionados. Por otro lado, también quiero que el contexto del objeto gestionado mainQueue tenga información actualizada. Me pregunto cuál será la solución estándar.


En realidad, hay mucha documentación sobre cómo hacer esto correctamente, incluidos los videos de la sesión de la WWDC de 2011 y 2012. La sesión 214 de 2012 "Mejores prácticas de datos básicos" sería especialmente interesante para usted.

Por ejemplo, para guardar, debería verse como:

[child performBlock:^{ [child save:&error]; [parent performBlock:^{ [parent save:&parentError]; }]; }];

Eso ahorra al niño, los cambios van al padre y usted guarda en el padre, lo que propagaría todos esos cambios correctamente a otros contextos hijos. En cuanto a su pregunta, creo que puede encontrar otros problemas con su implementación y la sesión 214 puede ser muy útil para resolverlos.

En cuanto a restablecer el contexto, NO recomendaría hacerlo al usar contextos secundarios primarios. También evitaría el uso de refreshObject:mergeChanges: El uso de objectWithID para este propósito puede ahorrarle mucho dolor, ya que hará el mejor uso de la caché de filas del contexto del objeto administrado. También atravesará solo lo necesario a través de la pila de niños y padres para satisfacer la solicitud.