将带有嵌套自定义 class 的自定义 class 数组存储到 standardUserDefaults
store array of custom class with nested custom class to standardUserDefaults
Swift 2
Xccode 7.3
我尝试存储这个:
var someArray = [Class1(id: 1, titel: "Titel 2", something: Class2(somevar: 20))]
与 NSUSerDefaults:
let arrayData = NSKeyedArchiver.archivedDataWithRootObject(someArray)
NSUserDefaults.standardUserDefaults().setObject(arrayData, forKey: "array")
我的 类 看起来像这样:
class Class1 {
var id: Int
var titel: String!
var something: Class2
init(id: Int, titel: String, something: Class2) {
self.id = id
self.titel = titel
self.something = something
}
required init(coder aDecoder: NSCoder) {
self.id = aDecoder.decodeIntForKey("id")
self.titel = aDecoder.decodeStringForKey("titel")
???
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(id, forKey: "id")
aCoder.encodeObject(titel, forKey: "titel")
???
}
class Class2: Class1
{
var somevar: Int
init(setback: Int) {
self.somevar = somevar
}
}
我需要在那些 类 中添加什么?
(必须添加更多细节;但我认为这是不言自明的)
非常简单。
写入:
self.something = aDecoder.decodeObjectForKey("something") as! Class2
阅读:
aCoder.encodeObject(something, forKey: "something")
使用@FLX 代码示例并确保对象树中的每个对象也符合 NSCoding。
Swift 2 Xccode 7.3
我尝试存储这个:
var someArray = [Class1(id: 1, titel: "Titel 2", something: Class2(somevar: 20))]
与 NSUSerDefaults:
let arrayData = NSKeyedArchiver.archivedDataWithRootObject(someArray)
NSUserDefaults.standardUserDefaults().setObject(arrayData, forKey: "array")
我的 类 看起来像这样:
class Class1 {
var id: Int
var titel: String!
var something: Class2
init(id: Int, titel: String, something: Class2) {
self.id = id
self.titel = titel
self.something = something
}
required init(coder aDecoder: NSCoder) {
self.id = aDecoder.decodeIntForKey("id")
self.titel = aDecoder.decodeStringForKey("titel")
???
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(id, forKey: "id")
aCoder.encodeObject(titel, forKey: "titel")
???
}
class Class2: Class1
{
var somevar: Int
init(setback: Int) {
self.somevar = somevar
}
}
我需要在那些 类 中添加什么?
(必须添加更多细节;但我认为这是不言自明的)
非常简单。
写入:
self.something = aDecoder.decodeObjectForKey("something") as! Class2
阅读:
aCoder.encodeObject(something, forKey: "something")
使用@FLX 代码示例并确保对象树中的每个对象也符合 NSCoding。