Swift NSCoding 如何解码自定义对象

问题描述 投票:0回答:1

我有一个自定义对象的字典(“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

虽然我没有从编码行中得到错误,但我仍然不确定这是否是正确的编码方法。

有人可以告诉我如何正确编码和解码吗?

swift nscoding nscoder
1个回答
0
投票

为了使用 NSCoding,您必须使对象图中的每个对象都符合 NSCoding。

ItemType
ItemEntity
的 NSCoding 一致性在哪里?

© www.soinside.com 2019 - 2024. All rights reserved.