关于Objective C:防止核心数据持久化对象

Prevent Core Data persisting object

是否可以防止核心数据保留对象?

假设我有一个具有BOOL属性isTemporaryNSManagedObject子类。

因此,当在上下文中调用保存时,我将对对象进行检查:

1
2
3
4
5
6
7
8
9
if (self.isTemporary) {

 // Do not save

} else {

// Save this object

}

编辑:该问题的更多背景信息

为澄清我的问题,我创建了一个对象,如果该对象已经存在,则是我要获取的数据库,如果不存在,则将其插入,并将该对象的临时标志设置为YES。我设置该标记是因为在此阶段尚不清楚用户是否将执行保存或取消操作。如果他保存,则将标志临时设置为"否"。如果他取消,则如果临时标记为YES,则删除该对象。

到目前为止还不错,但是与此同时,在后台可能会在后台进行核心数据保存操作,这些操作将持久化这些对象,即使我不希望它们持久化(因为它们应该是临时的)也是如此。因此,如果我不走运并且应用被杀,则可能会有不需要的对象,这些对象的临时标志设置为YES。一种选择是在启动应用程序时执行清除操作,以删除带有临时标志为YES的对象。但是,如果不保留那些对象,一切都会变得容易得多。


正确,即可以完成此操作。

1
2
3
if (self.isTemporary && self.managedObjectContext) {
   [self.managedObjectContext delete:self];
}

请注意,一旦NSManagedObjectmanagedObjectContext被删除,它将变为nil。


如果要防止Core Data持久化ManagedObject,换句话说,如果您不希望将对象写入文件,则可以通过以下方式初始化ManagedObject来实现此目的: :

1
2
3
4
5
6
7
8
9
@implementation MyManagedObject

- (id) init
{
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
    self = [super initWithEntity:entity insertIntoManagedObjectContext:Nil];
}

@end

现在,如果要保存对象,请按以下方式保存:

1
2
3
4
5
6
7
[managedObjectContext insertObject:myManagedObject];
NSError* error;
if ([managedObjectContext save:&error]) {
    NSLog(@"Successfully saveed ManagedObject!");                                                    
} else {
    NSLog(@"Failed to save ManagedObject!");
}

希望这会有所帮助!