我正在尝试按NSUserDefaults
保存数据。这是我的代码
@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
。请告诉我该怎么做?
答案 0 :(得分:0)
您需要使自定义对象符合NSCoding
协议,并实现编码和解码方法。完成后,您可以使用encode方法创建一个NSData对象以与NSUserDefaults一起使用。
类似这样的东西,在你的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 = ""
}