gpt4 book ai didi

swift - 复杂的自定义对象存储在 NSUserDefaults 中。可编码解决方案 Swift 4

转载 作者:行者123 更新时间:2023-11-30 11:22:19 29 4
gpt4 key购买 nike

我已经阅读和搜索了一段时间有关如何将自定义对象存储到“NSUserDefaults”中的信息。到目前为止,我已经找到了解决方案,允许我通过在自定义对象中实现“NSCoding”来实现这一目标。我得到的示例基于非常简单的对象,但就我而言,我面临着现有自定义类的挑战,该类具有复杂的结构并且其中包含其他自定义类。

class MyCustomClass:NSObject, NSCoding{

let codingTagSecondClass = "codingTagSecondClass"
var mySecondClass:MySecondCustomClass?
...

let codeingTagaString = "codeingTagaString"
var aString = "aString"
}

我已经实现了 NSCoding 方法,例如:

required init?(coder aDecoder: NSCoder) {
aString = aDecoder.decodeObject(forKey: codeingTagaString) as! String
mySecondClass = aDecoder.decodeObject(forKey: codingTagSecondClass) as? mySecondClass:MySecondCustomClass
}

func encode(with aCoder: NSCoder) {

aCoder.encode(aString, forKey: codeingTagaString)
aCoder.encode(mySecondClass, forKey: codingTagSecondClass)

}

这就是我存储到 NSUserDefaults 中的方式

let archivedObject = NSKeyedArchiver.archivedData(withRootObject: myCustomObject!)
let defaults = UserDefaults.standard
defaults.set(archivedObject, forKey: defaultUserCurrentServerProxy)

此实现仅适用于 String var,但当我尝试使用第二个自定义类执行此操作时它会崩溃...

我可以想象这是因为“MySecondCustomClass”没有实现“NSCoding”。那是对的吗?有没有不同的方法来实现我想要做的事情?我的自定义类的结构比我在这里显示的结构大,因此在我开始编码或考虑不同的替代方案之前,我需要知道。

非常感谢。

最佳答案

使用 Codable 代替,here关于如何使用它的非常好的帖子

关于swift - 复杂的自定义对象存储在 NSUserDefaults 中。可编码解决方案 Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131810/

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