微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cocoa:如何解压具有存档属性的 NSMutableAttributedString?

如何解决Cocoa:如何解压具有存档属性的 NSMutableAttributedString?

我尝试在 macos 应用程序中解压已归档的 NSMutableAttributedString,该应用程序是用 swift 编写的。我取回文本但没有任何属性属性在导出的序列化中,但被 NSMutableAttributedString(coder: unarchiver)!

忽略

让我们深入了解:首先我创建一个 AttributedString 并用红色背景格式化一个单词:

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 AttributedString 没有任何形式。 :-(

有没有办法恢复属性?我可以看到颜色信息在 serialisedData 流中。我用 outputFormat.xml 尝试了 .binary,结果相同。

这是操场输出

Playground

解决方法

明白了!

let archiver = try NSKeyedArchiver.archivedData(withRootObject: content,requiringSecureCoding: false)

let restored = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSMutableAttributedString.self,from: archiver)

呸!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。