4

我有一个NSTextView在一个NSPersistentDocument窗口。我将文本字段的内容绑定到“二进制数据”核心数据字段,但是当我在文本视图中键入文本时,文档的标题栏不会显示“已编辑”,直到文本视图失去焦点。因此,如果我在进行编辑后退出,则不会保存新数据。

如果我将NSContinuouslyUpdatesValueBindingOption标志传递给文本视图绑定,“已编辑”会立即出现,但在长文档中性能确实会受到影响。

我如何让 Core Data 知道有未保存的更改而不实际分配每个更改的所有文本数据?

(这个问题就像“绑定的 NSTextField 在失去焦点之前不会更新实体”,除了我不能使用NSContinuouslyUpdatesValueBindingOption,因为它使编辑操作非常慢。)

4

2 回答 2

1

据我所知,我认为这是不可能的。当您将更改分配给 NSManagnedObject 的属性时,CoreData 会为您管理状态(和撤消的东西)。如果您只是尝试在没有数据的情况下更改目录,则潜在的保存操作将不起作用。

查看“文档架构免费提供撤消支持”如何实现脏状态和撤消支持。

如果您有非常大的文本文档,我建议您不要将它们存储在 CoreData 属性中。正如您在“增量数据读取和写入”中所读到的,我建议将文本存储在单独的文件中并使用 NSFileWrapper。至少我将此解决方案用于我的应用程序。

这是顺便说一句。CoreData 本身在这里建议的内容“......但是,如果您能够将 BLOB 作为资源存储在文件系统上,并维护这些资源的链接(例如 URL 或路径),则更好。然后您可以将 BLOB 加载为并在必要时”

我不知道您的 NSTextView 中有什么样的文本,但您正在使用“长文档”。

于 2013-06-08T06:48:47.063 回答
0

如果您将“ NSTextView”子类化,则可以捕获insertText:方法,然后在键入字符后立即设置文档的“文档已编辑”标志,而无需执行繁重的(和 CPU 密集型的)绑定。

于 2013-03-17T20:14:20.357 回答