将 NSAttributedString 添加到 CloudKit

Adding NSAttributedString to CloudKit

我需要为 CloudKit 容器添加一些 NSAttributedString 文本设置。

在 CoreData 中,我使用的是属性类型 "Transformable"。当我尝试将 NSAttributedString 添加到 CloudKit 时,我的控制台日志中有一条警告消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Objects of class NSConcreteMutableAttributedString cannot be set on CKRecord'

我可以将 NSAttributedString 转换为 CloudKit 接受的某种类型吗?

documentation for CKRecord 所示,您只能存储一组有限的数据类型。鉴于可能的类型,您最好的选择是将 NSAttributedString 转换为 NSData。这可以使用 NSKeyedArchiver 来完成。然后,当您从 CloudKit 读取数据时,您可以使用 NSKeyedUnarchiver.

NSData 转换回原始 NSAttributedString

请参阅 以获取显示如何在 NSAttributedStringNSData 之间来回切换的答案。 (实际上该答案使用 NSMutableAttributedString)。当然你会 put/get NSData into/from 一个 CKRecord 而不是 NSUserDefaults.