2011-11-15 11 views
9

Mi problema es similar a: Problem creating NSManagedObject derived classUsar la clase NSManagedObject sin initWithEntity :?

He configurado un NSManagedObject en Core Data y tengo una clase para él. Sin embargo, en lugar de crear una clase NSObject idéntica, me gustaría usar la clase NSManagedObject, pero no quiero crear la entidad y guardarla. Solo quiero usarlo para una matriz, solo cuando necesito guardar el objeto en Core Data quiero usar insertEntity:

Tienda * store = [[Store alloc] init];

Me está dando el siguiente error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'

¿Hay una manera de cualquiera subclase o de alguna manera utilizan la clase/propiedades NSManagedObject para asignar objetos estoy usando sólo temporalmente para una mesa?

Gracias.

Respuesta

24

Sólo tiene que utilizar initWithEntity: insertIntoManagedObjectContext: y pasar un contexto nula, a continuación, llamar InsertObject: en su NSMAnagedObjectContext cuando esté listo:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext]; 
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil]; 
+1

Usted no está pasando nada al crear la descripción de la entidad. No tengo o quiero crear el contexto. – runmad

+1

¿Qué tan confiable es este método? Parece que es por eso que he votado, ¿pero esta es una forma documentada de hacerlo? –

+0

También puede pasar la descripción de la entidad para que SI alguna vez desee insertarla, puede hacerlo. – amcc

3

Si no guarda el MOC, puede simplemente eliminar el objeto antes de guardarlo y nunca se conservará.

Aunque Core Data es excelente para persistir, no es necesario. De hecho, los MOC se describen a menudo como un borrador. Puede generar objetos y luego tirarlos.

An instance of NSManagedObjectContext represents a single “object space” or scratch pad in an application.

Otra solución es tener un MOC separado para objetos temporales y luego o bien tirar el MOC temp o mover los MO en su MOC persistente.

Por lo tanto, en este caso sería - (void)insertObject:(NSManagedObject *)object en el "MOC persistente" y luego - (void)deleteObject:(NSManagedObject *)object en el "MOC temporal".

Cuestiones relacionadas