我的问题类似于:Problem creating NSManagedObject derived class
我在Core Data中设置了一个NSManagedObject并为它设置了一个类。但是,我不想创建一个相同的NSObject类,而是想使用NSManagedObject类,但我不想创建实体并保存它。我只想将它用于数组,只有当我需要在Core Data中保存对象时我才想使用insertEntity:
Store * store = [[Store alloc] init];
它给了我以下错误:CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'
有没有办法让子类或以某种方式使用NSManagedObject类/属性来分配我刚刚暂时用于表的对象?
谢谢。
答案 0 :(得分:25)
只需使用 initWithEntity:insertIntoManagedObjectContext:并传递 nil 上下文,然后在 NSMAnagedObjectContext 中调用 insertObject:当你准备好了:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext];
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
答案 1 :(得分:3)
如果你没有保存MOC,那么你可以在保存之前简单地删除该对象,它永远不会被保留。
虽然Core Data非常适合持久化,但并不是必需的。事实上,MOC通常被描述为便笺簿。您可以生成对象然后扔掉它们。
NSManagedObjectContext的一个实例表示应用程序中的单个“对象空间”或便笺簿。
另一种解决方案是为临时对象设置单独的MOC,然后丢弃临时MOC或将MO移动到持久性MOC中。
所以在这种情况下,你会在“持久性MOC”上- (void)insertObject:(NSManagedObject *)object
,然后在“临时MOC”上- (void)deleteObject:(NSManagedObject *)object
。