1

是否可以防止 Core Data 持久化一个对象?

假设我有一个NSManagedObject带有BOOLproperty的子类isTemporary

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

if (self.isTemporary) {

 // Do not save

} else {

// Save this object

}

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

嗯,为了澄清我的问题,我创建了一个对象,如果它已经存在,我就是我获取它的数据库,如果它不存在,我插入它并将对象的临时标志设置为 YES。我设置了这个标志,因为在这个阶段还不清楚用户是否会执行保存或取消操作。如果他保存,我将标志临时设置为 NO。如果他取消,那么如果临时标志为“是”,我将删除该对象。

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

4

2 回答 2

1

没错,就是这样可以做到的。

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

请注意,一旦删除managedObjectContext, a 的就会变为 nil。NSManagedObject

于 2013-07-04T15:57:42.727 回答
0

如果你想防止Core DataManagedObjectManagedObject.

@implementation MyManagedObject

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

@end

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

[managedObjectContext insertObject:myManagedObject];
NSError* error;
if ([managedObjectContext save:&error]) {
    NSLog(@"Successfully saveed ManagedObject!");                                                    
} else {
    NSLog(@"Failed to save ManagedObject!");
}

希望这可以帮助!

于 2014-07-22T07:26:11.760 回答