防止核心数据持久化对象

时间:2013-07-04 15:50:06

标签: objective-c cocoa core-data

是否可以阻止Core Data持久保存对象?

假设我的NSManagedObject子类具有BOOL属性isTemporary

因此,当在上下文中调用save时,我会检查对象:

if (self.isTemporary) {

 // Do not save

} else {

// Save this object

}

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

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

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

2 个答案:

答案 0 :(得分:1)

正确,就是如何做到的。

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

请注意,managedObjectContext的{​​{1}}一旦删除就会变为零。

答案 1 :(得分:0)

如果您想阻止Core Data保留ManagedObject,换句话说,如果您不希望将对象写入文件,则可以通过初始化{ManagedObject来实现此目的。 {1}}以下列方式:

@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!");
}

希望这有帮助!