You need to enable JavaScript to run this app. Cocoa Swift开发:macOS应用解档NSMutableAttributedString丢失属性
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 19:15:10