0

我的应用程序有时会将对象插入托管对象上下文中,这些对象不一定需要保存。例如,当我启动一个'添加实体'模式时,我创建一个托管对象并将其分配给模态。如果用户保存该模式,我保存上下文。如果他取消,我删除该对象,不需要保存。对NSManagedObjectContext的并发更改 - 如何以及何时保存

我现在已经引入了一个'导入'功能,切换到我的应用程序(使用URL方案)并添加一个实体。因为这些模式中的一个可能是开放的,所以在这一点上保存上下文是不安全的。为模式创建的瞬态对象将被保存,即使用户取消,也无法保证删除(从取消操作)将在以后保存 - 用户可能会退出应用程序。

同样,我不能简单地保存每当我的应用程序退出。如果该模式在此时打开,则临时对象将被错误地保存。

我正在寻找处理此架构的策略。我正在考虑一些“标记”解决方案,它允许我识别导入的实体。当用户用户退出应用程序时,我会检查上下文是否存在未保存的更改。如果是这样,我会过滤除导入的实体以外的所有内容,然后保存。我不知道这是可能的(选择性储蓄)还是一个好主意。

+1

听起来像你的模态应该使用单独的上下文,这将允许您保存主要上下文,而不会意外地从模态中获取正在进行的更改。 –

+1

伟大的文章在这里:http://www.cocoanetics.com/2012/07/multi-context-coredata/关于使用不同的scanarios包括你所描述的一个孩子上下文。 –

+0

谢谢你们 - 我已经阅读过几次链接的博客,正在尝试实施。我有一些问题,但到目前为止,感觉就像是正确的道路。我将在工作时添加自己的答案,详细说明我的解决方案。 –

回答

0

凯文和安德鲁的评论(和链接的文章)足以让我走了。我在this问题中得到了一些后续建议。

总之,我正在使用子上下文创建瞬态对象,然后将其合并到主上下文中。实际上,我只需要临时上下文作为插入对象的位置 - 例如,如果可以在插入消息外创建它,我可以这样做,然后将其直接插入到确认的主要上下文中。

相关问题