返回NSUserDefaults的空数组
问题描述:
我有一个类的人,这是一个模型返回NSUserDefaults的空数组
import Foundation
public class Person : NSObject , NSCoding{
public var name:String="";
public var gender:Int = 0;
public var status:Int = 0
override init(){
super.init()
}
public init (name:String, gender:Int){
self.name=name;
self.gender=gender;
}
required public init(coder aDecoder: NSCoder) { }
public func encodeWithCoder(_aCoder: NSCoder) { }
}
现在,当我尝试中检索[人]数组我使用方法getPersons(arr : String!)
。如果NSUserDefaults中没有数据,我创建它,将1个元素放入它并使用setPersons()
方法存储。
问题是,在检索我得到一个数组正确计数(1),但对象没有填充,有“”在字符串和0在整数变量。
private func archivePeople (people : [Person]) -> NSData{
return NSKeyedArchiver.archivedDataWithRootObject(people as NSArray)
}
public func getPersons(arr : String!) -> [Person]{
var array : [Person] = []
if let unarchivedObject = NSUserDefaults.standardUserDefaults().objectForKey(arr) as? NSData {
array = (NSKeyedUnarchiver.unarchiveObjectWithData(unarchivedObject) as? [Person])!
}
if array.count == 0 {
array.append(Person(name: A.DEFAULT_THEIR_NAMES,gender: 0))
setPersons(arr, people: array)
}
return array
}
public func setPersons(key: String, people : [Person]){
let archivedObject = archivePeople(people)
userDefaults.setObject(archivedObject, forKey: key)
userDefaults.synchronize()
}
什么是错?我是否以错误的方式设置或检索?
答
您需要正确覆盖NSCoding
函数。 它应该看起来像什么下面的代码:
required public convenience init(coder aDecoder: NSCoder) {
let name: String = aDecoder.decodeObject(forKey: "name") as! String
let gender = aDecoder.decodeInt64(forKey: "gender")
let status = aDecoder.decodeInt64(forKey: "status")
self.init(name: name, gender: Int(gender))
self.status = Int(status)
}
public func encodeWithCoder(_aCoder: NSCoder) {
_aCoder.encode(self.name, forKey: "name")
_aCoder.encode(Int64(self.gender), forKey: "gender")
_aCoder.encode(Int64(self.status), forKey: "status")
}
+0
解码的特性(?。 )它说参数传递给调用,不需要任何参数 – user2976267
什么是在'初始化的机构(coder'和'encodeWithCoder('当然,你需要添加代码来编码和初始化 – vadian