Mezclar contextos de objetos administrados padre e hijo a lo largo de una jerarquía de vistas
Estoy utilizando Core Data para persistir datos en mi aplicación y tengo una pregunta sobre cómo combinar contextos de objetos administrados principal e hijo en una jerarquía de vistas.
Para simplificar, digamos que mi aplicación permite a los usuarios crear una biblioteca de recetas que han ideado.
En la aplicación, tengo tres pantallas:
- LIBRERÍA: La vista de nivel superior de la “biblioteca” donde el usuario puede seleccionar diferentes recetas y tocar para editarlas o agregar una nueva receta.
- MODAL DE EDICIÓN/AGREGAR: La pantalla de edición/agregar que permite cambiar una receta existente o crear una nueva desde cero.
- POPUP DE INGREDIENTES: Un popover de selección que permite al usuario elegir de una lista de ingredientes y agregar nuevos a la lista.
Como suele ser práctica común, estoy creando un contexto hijo para la vista modal de edición/agregar para poder descartar los cambios si el usuario toca “cancelar” y solo persistirlos si se toca “guardar”.
Mi duda radica en cómo manejar el popover de ingredientes. Me gustaría que los ingredientes de esta lista se compartieran entre todas las recetas, de modo que cuando el usuario agregue un ingrediente mediante la vista modal de edición/agregar de una receta, luego pueda agregarlo a otras recetas sin tener que agregarlo a la lista nuevamente. Por supuesto, si creo nuevas instancias de “ingrediente” en el contexto hijo, se descartarán si el usuario toca “cancelar” en la vista modal de edición/agregar. Por lo tanto, actualmente estoy intentando usar el contexto principal.
No sorprende que actualmente esté viendo el siguiente error cuando toco para seleccionar un ingrediente para la receta actual:
“Intento no válido de establecer una relación ‘ingrediente’ entre objetos en contextos diferentes”.
Entonces mi pregunta es, ¿cómo puedo usar un contexto hijo para la vista modal de edición/agregar pero hacer que el popover de ingredientes use el contexto principal para que los cambios realizados en esta vista se persistan, sin importar si el usuario guarda o cancela en la vista modal de edición/agregar?
Estaría encantado de incluir algún código si es necesario, pero principalmente es una pregunta sobre las mejores prácticas. Se agradecerían ejemplos de código de posibles soluciones.
davy.ai
Para resolver este problema, también puedes utilizar el contexto principal para el popover de ingredientes. Aquí te explicamos cómo hacerlo:
Ejemplo de código:
Nota: Es importante guardar el contexto secundario primero y luego el contexto principal para evitar conflictos de fusión.