Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use NSManagedObject class without initWithEntity:?

My problem is similar to: Problem creating NSManagedObject derived class

I have setup a NSManagedObject in Core Data and have a class for it. However, instead of creating an identical NSObject class, I'd like to use the NSManagedObject class, but I don't want to create the entity and save it. I just want to use it for an array, only when I need to save the object in Core Data do I want to use insertEntity:

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

It's giving me the following error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'

Is there a way to either subclass or somehow use the NSManagedObject class/properties to allocate objects I am just using temporarily for a table?

Thank you.

like image 317
runmad Avatar asked Nov 15 '11 15:11

runmad


2 Answers

Just use initWithEntity:insertIntoManagedObjectContext: and pass a nil context, then call insertObject: in your NSMAnagedObjectContext when you are ready:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext];
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
like image 200
daveoncode Avatar answered Oct 12 '22 20:10

daveoncode


If you don't save the MOC, then you can simply delete the object before the save and it will never be persisted.

While Core Data is great for persisting, it is not required. In fact MOCs are often described as a scratch pad. You can generate objects and then throw them away.

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

Another solution is to have a separate MOC for temporary objects and then either throw away the temp MOC or move the MOs into your persistent MOC.

So in this case you would - (void)insertObject:(NSManagedObject *)object on the "Persistent MOC" and then - (void)deleteObject:(NSManagedObject *)object on the "Temporary MOC".

like image 43
logancautrell Avatar answered Oct 12 '22 20:10

logancautrell