Pregunta

Estoy trabajando en una aplicación que realizará una búsqueda en un servicio en línea y generará muchos objetos de resultados. Un objeto Result es un objeto NSManagedObject, que se inicializa según sea necesario al asociarlo con un objeto NSManagedObject.

Los usuarios deben poder seleccionar un " Resultado " y guárdelo como un " Favorito " ;. En la aplicación, esto es tan simple como asociar la entidad Resultado con una nueva entidad favorita y guardar el contexto.

El problema es que cada resultado individual en el contexto, por supuesto, se guarda en la base de datos junto con el que quiero favorito.

He visto muchos ejemplos de uso de varias instancias de NSManagedObjectContext para administrar varias situaciones de creación y persistencia. Todos ellos parecen girar en torno a la idea de crear nuevas instancias con un contexto y luego fusionarlas para guardarlas en otro contexto con el fin de evitar otra ejecución de FetchRequest. Estos ejemplos no resuelven el problema, ya que aún conducen a que se guarden todas las entidades de Resultados.

¿Alguien tiene alguna sugerencia? Estoy totalmente agotado en esto.

¿Fue útil?

Solución

Debes usar un contexto diferente para cada objeto. El uso de un contexto de objeto gestionado separado le permite trabajar de la siguiente manera. Cuando el usuario selecciona su objeto favorito, simplemente descarta los contextos relacionados con los objetos de resultado restantes. No hay necesidad de fusionar cambios, etc. Básicamente hay una compensación. Terminas administrando (creando / descartando) varios contextos, pero luego logras tu objetivo fácilmente. De lo contrario, aún puede hacer esto utilizando un solo contexto. Sin embargo, debe insertar o eliminar explícitamente cada objeto como se muestra en los siguientes fragmentos de código.

Prueba esto. Solo para el objeto favorito que desea guardar, haga lo siguiente:

[managedObjectContext insertObject:theFavorite];

Para cada uno de los otros objetos de resultados, haga esto en su lugar:

[managedObjectContext deleteObject:aResult];

luego guarda como siempre

NSError *error = nil
if (![managedObjectContext save:&error]) {
   // Handle error

}

Esto guardará SOLO tu objeto favorito seleccionado.

Otros consejos

Prefiero usar un contexto NIL y tener una clase de modelo de dominio base para manejar la adición recursiva de objetos a un contexto válido cuando deseo mantenerlos. Funciona realmente bien (y limpiamente) ... código disponible aquí ... Datos centrales temporales

Cree objetos de resultados que no sean subclases NSManagedObject. Cuando el usuario elija una, cree una instancia administrada única y guárdela.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top