【发布时间】:2009-09-11 00:49:24
【问题描述】:
在为核心数据堆栈生成的代码中,在 applicationWillTerminate 方法中调用了 managedObjectContext 上的保存。这是为了在退出前处理上下文中所有未保存的对象。
这也有保存任何临时对象的不良副作用。 (这个问题在苹果示例代码中也是可见的。如果您在Recipe示例代码中单击+添加新Recipe,然后按Home键终止应用程序,下次启动应用程序时会看到半完成的Recipe对象)。
处理此问题的首选设计模式是什么?我可以想到以下几点。
- 为临时对象使用不同的暂存器 managedObjectContext,当您决定真正保存时,然后在主 managedObjectContext 中推送一个副本。仅在 applicationWillTerminate 中的 main managedObjectContext 上调用 save。 (除了在新上下文中手动创建副本之外,还有什么简单快捷的方法可以将对象从一个 managedObjectContext 移动到另一个?)
- 从 applicationWillTerminate 中删除保存,但确保在进行更改后立即保存所有对象。 (这可能并不容易,我有一个选项卡式应用程序,用户可能同时启动了编辑操作。
如果有更好的处理方法,请告诉我。
【问题讨论】: