2016-10-28 129 views
0

我有一個類的人,這是一個模型返回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() 
    } 

什麼是錯?我是否以錯誤的方式設置或檢索?

+1

什麼是在'初始化的機構(coder'和'encodeWithCoder('當然,你需要添加代碼來編碼和初始化 – vadian

回答

3

您需要正確覆蓋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