没有上下文的CoreData关系设置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有上下文的CoreData关系设置?相关的知识,希望对你有一定的参考价值。
我有两个NSManagedObject
子类。 Flight
和Aircraft
。每个Flight
与一个Aircraft
相关联。
当用户创建Flight
时,我只执行以下操作:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Flight" inManagedObjectContext:self.managedObjectContext];
self.flight = [[Flight alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
创建对象但不要将其插入managedObjectContext
,直到用户确定要保存它为止。如果他们保存,我插入对象,如果他们取消,它被丢弃。
到目前为止,这是一个很好的解决方案。当用户选择Aircraft
时,我这样做:
[self.flight setAircraft:aircraft];
但是,因为flight
对象尚未插入managedObjectContext
,应用程序崩溃时出现此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship 'aircraft' between objects in different contexts
那讲得通。如果我一旦插入flight
对象,就不会发生此错误。但是它会产生一个问题,如果用户取消并且不再想要这个飞行物体怎么办?
为什么不使用一组父子语境。继续在子环境中插入所有内容。如果用户最终选择“保存”,则首先在子上下文中调用save:selector(然后再调用父上下文)。如果用户最终选择“取消”,则在子上下文中调用rollback:selector。
http://www.cocoanetics.com/2012/07/multi-context-coredata/
听起来最终,用户将保存这些更改或取消它们,并且在此期间不会发生其他CoreData操作。如果这是真的,当你准备好保存时,请打电话给NSManagedObjectContext's
save:
然后。否则,调用它的rollback
和撤消堆栈中的所有更改(即,自上次调用save:
以来您已更改的所有内容,例如flight
的创建)将被撤消。
使用飞机和飞行的临时环境......划痕背景
这是推荐的AFAICS方式
如果用户点击保存,保存上下文,否则......什么都不做
以上是关于没有上下文的CoreData关系设置?的主要内容,如果未能解决你的问题,请参考以下文章
RestKit/CoreData 没有立即将关系保存到持久存储