使用Cocoa和Core Data自动保存

时间:2009-09-30 19:57:16

标签: cocoa core-data

我正在开发一个非基于文档的Core Data应用程序。

我希望在发生变化时保存更改。这是用户在此类应用程序中所期望的。这也是Apple在 iPhoto iTunes 中实现的。

蛮力方法是设置一个频繁保存的计时器。然后,由保存触发的方法将吞下所有验证错误,以免打扰用户。只有在退出时,用户才会被安排数据以便保存。恕我直言,这种方法很臭。

所以我想,必须有办法以某种方式将保存挂钩到像NSEditor协议这样的东西。每次用户(或控制器)完成编辑数据时,应以某种方式通知应用程序委托触发保存操作。事情是我不知道在哪里看。

我认为对于更复杂的操作,可能需要进行一些交叉验证,我会向用户提供与专用NSManagedObjectContext绑定的接口位。

1 个答案:

答案 0 :(得分:15)

在AppKit应用程序的每个事件结束时,CoreData将为您运行-processPendingTransactions。

这样做的另一个副作用是,如果您已注册NSManagedObjectContext以接收更改通知,则会在每个事件结束时调用。

因此,例如,在您的通知处理程序中,您可以调用告诉上下文保存。

但是,在同一个上下文的回调中,你可能会偏执地对上下文进行保存,所以如果你做了一个performSelector你可能会感觉更好:@selector(save :) afterDelay:推送保存直到-processPendingTransactions完成之后。

您甚至可以在-save:选择器上执行取消操作,并且延迟时间为5秒,因此如果用户或应用程序处于更改的BUNCH中间,则它们将全部合并为单个保存。

事实上,这正是Delicious Library 1.0-1.09的工作方式。

-Wil