cocoa - 使用 Cocoa 和 Core Data 自动保存

标签 cocoa core-data

我正在开发一个非基于文档的核心数据应用程序。

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

一种强力方法是设置一个计时器来频繁保存。然后,由保存触发的方法将吞掉所有验证错误,以免打扰用户。只有在退出时,用户才会被窃听来整理数据以便保存。恕我直言,这种方法很糟糕。

所以我在想,一定有一种方法可以以某种方式将保存 Hook 到诸如 NSEditor 协议(protocol)之类的东西。每次用户(或 Controller )完成数据编辑时,应以某种方式通知应用程序委托(delegate)触发保存操作。问题是我不太知道该去哪里寻找。

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

最佳答案

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

这样做的一个副作用是,如果您已注册 NSManagedObjectContext 来接收更改通知,那么您将在每个事件结束时被调用。

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

但是,您可能会偏执于在同一上下文的回调中对上下文进行保存,因此如果您执行 PerformSelector:@selector(save:) afterDelay: 来推送保存,您可能会感觉更好直到 -processPendingTransactions 完成之后。

您甚至可以在 -save: 选择器上执行取消操作,并将延迟设置为 5 秒左右,因此,如果用户或应用程序正在进行一堆更改,它们将全部合并到一个保存中。

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

-威尔

关于cocoa - 使用 Cocoa 和 Core Data 自动保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500327/

相关文章:

iphone - 根据当前横向模式自动旋转默认应用程序图像

ios - swift : Terminating app due to uncaught exception 'NSInvalidArgumentException' , 原因: 'Entity name must not be nil.'

ios - 向下转换核心数据错误

ios - 为 watchOS 2.0 实现核心数据

iphone - 核心数据、NSPredicate 和对多键

swift - 如何确认核心数据执行

cocoa - 无法将 "path"转换为 real 类型

objective-c - "stringWithString"与 "alloc ... initWithString ... autorelease"

cocoa - 非基于文档的应用程序 Cocoa 中的 "Save As"

objective-c - NSProgressIndicator 问题 - 也许是我的 NSView 子类?