2010-08-26 16 views
6

Estoy intentando escribir un sistema de favoritos para mi aplicación. Ya he convertido mi modelo en un objeto administrado. Imagine que al usuario se le presenta una pantalla con una lista de dichos objetos. Pueden elegir guardar algunos en sus favoritos, lo que los mantendrá en los datos básicos.Datos principales: crea varios objetos administrados, pero solo guarda algunos?

El problema es que cuando creo todos estos objetos de modelo, lo hago con el contexto del objeto gestionado. Si el usuario guarda uno solo en sus favoritos, guardará todo el contexto y persistirá en todas las entidades. Los extras no estarán en sus favoritos, ya que agregar a los favoritos construye una entidad "favorita" que se guarda y apunta al objeto, que los otros no tendrán. Pero todos los demás objetos se guardarán innecesariamente.

¿Cuál es la forma estándar de esta forma estándar de diseñar un sistema de favoritos para iPhone? ¿Debo separar mi modelo en dos clases, la que le muestro al usuario y luego una que la guarde en la base de datos? De esa manera podría construir mis modelos sin ponerlos en el MOC. Pero eso sería una clase duplicada con todos los mismos campos.

Respuesta

6

No existe una forma estándar de hacerlo porque Core Data espera que guarde los objetos que crea. Sin embargo, si crea los objetos con:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil]; 

No tendrán contexto para guardar. Entonces, para los que usted necesita para ahorrar puede:

[[self managedObjectContext] insertObject:object]; 

luego llamar a -save: del contexto y sólo aquellos que han tenido su conjunto contexto salvará.

+0

¿Y esto es seguro? Vi que el método de conveniencia para construir NSMOs reemplaza una gran porción de código. – Tesserex

+0

Sí, es seguro, ¿qué método de conveniencia? El método que describí es el mismo que llamar '[NSEntityDescription insert ...]'. La única diferencia es que el método 'NSEntityDescription' devuelve un objeto liberado automáticamente. –

+1

Ok, solo tienes tu segunda cosa al revés. La llamada correcta es '[[self managedObjectContext] addObject: object]', el inverso que tienes allí no existe. – Tesserex

0

¿No sería más fácil tener una propiedad isFavorite en los objetos administrados? Entonces, en su vista de favoritos, ¿puede filtrar según eso?

+3

Pero eso todavía no pasa por alto el hecho de que estoy guardando una gran cantidad de datos que no necesito. – Tesserex

Cuestiones relacionadas