2010-06-17 61 views
0

我有一个NSTableView通过CoreData支持的NSArrayController填充。用户可以编辑他们在NSTableView中选择的任何字段。当他们选择已修改的行并按下按钮时,数据将发送到第三方Web服务。如果web服务接受更新的值,我想将这些值提交给我的持久性存储。但是,如果web服务返回一个错误(或者完全无法返回),我希望编辑后的字段恢复为原始值。还原CoreData数据

使问题复杂化,我有一些其他可编辑控件,由CoreData支持,不需要诉诸此行为。

我相信这个问题的解决方案围绕创建一个辅助管理对象上下文,我将只使用该特定NSTableView中编辑的值。但我很困惑这两个MOC会如何相互影响。

这个问题的最佳解决方案是什么?

回答

1

最简单的解决方案是实现Core Data的撤销功能。通过这种方式,可以对Core Data进行更改,但如果服务器返回错误,则只需回滚更改。有关详细信息,请参阅核心数据文档。

+0

除非我弄错了,这意味着如果用户编辑了NSTableView数据,然后在联系web服务时退出应用程序,信息将被保存并因此成为持久存储的一部分? – ndg 2010-06-17 14:55:23

+0

TechZen是正确的,如果用户在中间退出,更改将不会持久,因为您从未在'NSManagedObjectContext'上执行过保存。 – 2010-06-17 16:35:18

+0

如果您在退出时自动调用保存,则会保存不良信息。防止这种情况的方法是设置一个标志,以便只有在确认输入的最后一个信息时才立即保存上下文。否则,它会在保存前滚动。核心数据的撤销功能仅适用于这种类型的情况。无论用户还是其他人触发撤销都无关紧要。行为是一样的。 – TechZen 2010-06-17 16:58:34