我有一个自定义对象的字典(“equippedItems”),我想对其进行编码和解码。
var equippedItems = [ItemType : ItemEntity]()
我尝试将其编码如下:
override func encode(with aCoder: NSCoder) {
aCoder.encode(equippedItems, forKey: "Equiptments")
}
但这会导致应用程序崩溃。因此我尝试使用以下代码对其进行编码,并且应用程序不再崩溃。这是正确的方法吗?
override func encode(with aCoder: NSCoder) {
let eq = try? NSKeyedArchiver.archivedData(withRootObject: equippedItems, requiringSecureCoding: false)
aCoder.encode(eq, forKey: "Equiptments")
}
但是,现在我在以下函数中解码对象时遇到问题:
required convenience init?(coder aDecoder: NSCoder) {
equippedItems = aDecoder.decodeObject(forKey: "Equiptments") as! [ItemType: ItemEntity]
}
应用程序因错误而崩溃:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
虽然我没有从编码行中得到错误,但我仍然不确定这是否是正确的编码方法。
有人可以告诉我如何正确编码和解码吗?
为了使用 NSCoding,您必须使对象图中的每个对象都符合 NSCoding。
ItemType
和 ItemEntity
的 NSCoding 一致性在哪里?