NSPersistentDocument 中的 NSTextView 在失去第一响应者之前不会更新脏标志



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

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

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

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

我认为这是不可能的,据我所知。当你把改变分配给NSManagnedObject的一个属性时,CoreData管理为你删除状态(和撤销东西)。如果您只是尝试在没有数据的情况下更改磁盘,则可能的保存操作将无法工作。

看一下"The Document Architecture提供免费的撤销支持"是如何实现脏状态和撤销支持的

如果你有非常大的文本文档,我建议你不应该将它们存储在CoreData属性中。正如你可以在"增量数据读写"中读到的,我建议将文本存储在一个单独的文件中,并使用NSFileWrapper。至少我在我的应用程序中使用了这个解决方案。

这是btw。CoreData本身在这里的建议是"……但是,如果能够将blob作为资源存储在文件系统上,并维护指向这些资源的链接(如url或路径),则更好。然后可以在必要时加载BLOB "

我不知道你的NSTextView中有什么样的文本但是你说的是"长文档"

如果你子类化你的" NSTextView ",你可以捕获" insertText: "方法,然后只要键入一个字符,设置文档的"document Edited"标志,而不需要你正在做的繁重(和CPU密集型)绑定。

最新更新