如何在 Cocoa 文本输入系统中使用 Core Data?

Posted

技术标签:

【中文标题】如何在 Cocoa 文本输入系统中使用 Core Data?【英文标题】:How do I use Core Data with the Cocoa Text Input system? 【发布时间】:2010-06-12 15:35:53 【问题描述】:

这里是业余爱好者 Cocoa 程序员。一直在寻找所有常见的地方,但这似乎解释得不够充分:

我正在写一些与众不同的东西。它比桌面发布应用程序简单得多,但也很相似。我想在画布上任意放置可编辑的文本框。

这是基于文档的,我真的很想使用 Core Data。

现在,cocoa 文本处理系统似乎要处理四类结构:NSTextStorage、NSLayoutManager、NSTextContainer,最后是 NSTextView。我已经研究过这些并且知道如何使用它们,有点。一直在制作一些原型,它适用于简单的应用程序。

当我进入持久性时,问题就来了。 我不知道如何,通过 Cocoa 绑定或其他方式,将 NSTextStorage 的内容(=实际文本)存储在我的托管对象上下文中。

我考虑过在这些对象中覆盖方法对,例如 -words、-setWords:。这可以让我将单词链接到一个字符串,我知道如何将其存储在 Core Data 中。但是,我必须重写任何影响文本的方法 - 这似乎有点多。

感谢您提供任何见解。

【问题讨论】:

【参考方案1】:

NSTextStorage 只是 NSMutableAtrributedString 的一个子类,它支持 NSCoding 协议,因此您可以使用默认的 NSKeyedUnArchiveFromData 转换将其作为可转换属性保存在 Core Data 中。

我很确定这适用于您可能想要保存的所有其他类,但视图可能除外。 (我从未尝试将它们存储在 Core Data 中,但理论上可以这样做。)

任何实现/继承 NSCoding 或具有initWithCoder: 方法的类都可以作为可转换属性存储在代码数据中。

【讨论】:

哦,亲爱的。我将研究可转换的属性。示例代码 sn-ps 当然值得赞赏。【参考方案2】:

我建议将文本视图的value 绑定绑定到您的模型实体之一的字符串属性,或者将attributedString 绑定绑定到可转换属性。这会将视图连接到模型,而无需您自己来回传递文本。

【讨论】:

以上是关于如何在 Cocoa 文本输入系统中使用 Core Data?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cocoa (Mac) 在 Swift 中创建 PDF

Cocoa touch : 多行文本输入

Cocoa:如何在 Mail.app 中绘制插入文本?

Cocoa/Objective-C - 带有文本输入的子窗口,而主窗口没有变为非活动状态

在 Cocoa/Interface Builder 中,单击按钮后如何清除文本字段中的文本

带有命令行界面的 Core Data Cocoa 应用程序