如何在 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/Objective-C - 带有文本输入的子窗口,而主窗口没有变为非活动状态