没有上下文的CoreData关系设置?

问题描述 投票:2回答:3

我有两个NSManagedObject子类。 FlightAircraft。每个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对象,就不会发生此错误。但是它会产生一个问题,如果用户取消并且不再想要这个飞行物体怎么办?

ios iphone core-data nsmanagedobjectcontext
3个回答
1
投票

为什么不使用一组父子语境。继续在子环境中插入所有内容。如果用户最终选择“保存”,则首先在子上下文中调用save:selector(然后再调用父上下文)。如果用户最终选择“取消”,则在子上下文中调用rollback:selector。

http://www.cocoanetics.com/2012/07/multi-context-coredata/


0
投票

听起来最终,用户将保存这些更改或取消它们,并且在此期间不会发生其他CoreData操作。如果这是真的,当你准备好保存时,请打电话给NSManagedObjectContext's save:然后。否则,调用它的rollback和撤消堆栈中的所有更改(即,自上次调用save:以来您已更改的所有内容,例如flight的创建)将被撤消。


0
投票

使用飞机和飞行的临时环境......划痕背景

这是推荐的AFAICS方式

如果用户点击保存,保存上下文,否则......什么都不做

© www.soinside.com 2019 - 2024. All rights reserved.