gpt4 book ai didi

ios - NSKeyedArchiver 自定义对象数组

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:38 26 4
gpt4 key购买 nike

注意:Xcode 8 Beta 6

我不确定我遗漏了什么,但出于某种原因,我在 NSKeyedArchiver.archivedData 行上收到以下错误。

'NSInvalidArgumentException', reason: '-[_SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x60000024c690'
*** First throw call stack:

这是我的类,它符合 NSCoding 协议(protocol):

enum PhraseType {
case create
case item
}

class Phrase: NSObject, NSCoding {

var englishPhrase :String!
var translatedPhrase :String!
var phraseType :PhraseType! = PhraseType.item

required init?(coder decoder: NSCoder) {

self.englishPhrase = decoder.decodeObject(forKey: "englishPhrase") as! String
self.translatedPhrase = decoder.decodeObject(forKey: "translatedPhrase") as! String
self.phraseType = decoder.decodeObject(forKey: "phraseType") as! PhraseType
}

func encode(with coder: NSCoder) {

coder.encode(self.englishPhrase, forKey: "englishPhrase")
coder.encode(self.translatedPhrase, forKey: "translatedPhrase")
coder.encode(self.phraseType, forKey: "phraseType")
}

init(englishPhrase :String, translatedPhrase :String) {

self.englishPhrase = englishPhrase
self.translatedPhrase = translatedPhrase

super.init()
}

}

这里是归档的代码:

 let userDefaults = UserDefaults.standard
var phrases = userDefaults.object(forKey: "phrases") as? [Phrase]

if phrases == nil {
phrases = [Phrase]()
}

phrases?.append(phrase)

let phrasesData = NSKeyedArchiver.archivedData(withRootObject: phrases)

userDefaults.set(phrasesData, forKey: "phrases")
userDefaults.synchronize()

有什么想法吗?

最佳答案

您不能对 Swift 枚举(例如 PhraseType)进行编码。相反,给这个枚举一个原始值并对原始值进行编码(并在解码时,使用它来重建正确的枚举案例)。

完成后,您需要将 Swift 数组转换为 NSArray 以正确存档。

关于ios - NSKeyedArchiver 自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com