是否可以阻止Core Data持久保存对象?
假设我的NSManagedObject
子类具有BOOL
属性isTemporary
。
因此,当在上下文中调用save时,我会检查对象:
if (self.isTemporary) {
// Do not save
} else {
// Save this object
}
编辑:该问题的更多背景信息
嗯,为了澄清我的问题,我创建了一个对象,如果它已经存在我就是我获取它的db,如果它不存在我插入它并将对象的临时标志设置为YES。我设置了标志,因为在此阶段不清楚用户是否会执行保存或取消操作。如果他保存我将标志临时设置为NO。如果他取消,那么如果临时标志为YES,我将删除该对象。
到目前为止一直很好,但同时在后台可以在后台发生核心数据保存操作,即使我不希望它们持久存在(因为它们应该是临时的),这些操作将持久保存这些对象。因此,如果我运气不好并且应用程序被杀死,我可能会有不需要的对象将临时标志设置为YES。一种选择是在启动应用程序时执行清理操作,以删除具有临时标志YES的对象。但如果它不会持续存在这些对象,那么一切都会变得容易多了。
答案 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!");
}
希望这有帮助!