2015-09-11 90 views
0

我正在嘗試通過NSUserDefaults保存數據。這裏是我的代碼如何將swift中的自定義數組轉換爲NSData?

@IBAction func saveBtn(sender: AnyObject) { 
    var userName = nameLbl.text 
    UserInfo.append(User(name: userName)) 
    NSUserDefaults.standardUserDefaults().setObject(UserInfo, forKey: "UserInfo") 
    userName = "" 

} 

但是當我點擊保存按鈕,它顯示Attempt to set a non-property-list object。我想,UserInfo數組需要轉換爲NSData。請告訴我,我該怎麼做?

+1

閱讀上'NSKeyedArchiver'溶爲一體。 – rmaddy

回答

0

您需要使自定義對象符合NSCoding協議,並實現編碼和解碼方法。一旦你這樣做了,你可以使用編碼方法來創建一個NSUserDefaults使用的NSData對象。

這樣的事情,在你的UserInfo類:

required convenience init?(coder decoder: NSCoder) { 
    self.init() 

    guard let title = decoder.decodeObjectForKey("title") as? String 
    else {return nil } 

    self.title = title 
} 

func encodeWithCoder(coder: NSCoder) { 
    coder.encodeObject(self.title, forKey: "title") 
} 

然後,你可以使用NSUserDefaults的編碼數據是這樣的:

@IBAction func saveBtn(sender: AnyObject) { 
    var userName = nameLbl.text 
    UserInfo.append(User(name: userName)) 
    let data = NSKeyedArchiver.archivedDataWithRootObject(UserInfo) 
    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "UserInfo") 
    userName = "" 
} 
相關問題