Cocoa Swift开发:macOS应用解档NSMutableAttributedString丢失属性
macOS开发下NSMutableAttributedString解档丢失属性问题
问题描述
在Swift开发的macOS应用中,尝试对已归档的NSMutableAttributedString执行解档操作时,最终仅能获取纯文本内容,所有原有文本属性全部丢失。已确认导出的序列化流中包含属性相关信息,但这些信息在通过NSMutableAttributedString(coder: unarchiver)初始化实例的过程中被完全忽略。
复现流程
- 第一步:创建NSMutableAttributedString实例,为指定范围的单词设置红色背景属性:
let content = NSMutableAttributedString(string: "Dogs like to play with balls.") content.addAttributes([NSAttributedString.Key.backgroundColor: NSColor.red], range: NSMakeRange(5, 4))
- 第二步:使用NSKeyedArchiver对该实例进行序列化:
let archiver = NSKeyedArchiver(requiringSecureCoding: false) archiver.outputFormat = .xml content.encode(with: archiver) archiver.finishEncoding()
- 第三步:将序列化完成的结果存入变量:
let serialisedData = archiver.encodedData
- 第四步:基于序列化数据初始化新的NSMutableAttributedString实例:
let unarchiver = try NSKeyedUnarchiver(forReadingFrom: serialisedData) let restored = NSMutableAttributedString(coder: unarchiver)!
异常表现
最终得到的restored属性字符串未保留任何之前设置的格式。已完成的验证项包括:
- 明确观测到颜色信息存在于serialisedData序列化流中
- 分别测试了
outputFormat设置为.xml与.binary两种模式,解档结果完全一致,均无属性保留 - 全流程运行结果可通过本地Playground截图直观查看
待实现目标
找到能够完整还原文本原有全部属性的可落地方案。
内容的提问来源于stack exchange,提问作者Peter Shaw
相关产品推荐
相关产品推荐

