在没有initWithEntity的情况下使用NSManagedObject类:?

时间:2011-11-15 15:45:31

标签: ios core-data nsmanagedobject

我的问题类似于: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类/属性来分配我刚刚暂时用于表的对象?

谢谢。

2 个答案:

答案 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