我正在尝试通过 NSUserDefaults
保存数据。这是我的代码
@IBAction func saveBtn(sender: AnyObject) {
var userName = nameLbl.text
UserInfo.append(User(name: userName))
NSUserDefaults.standardUserDefaults().setObject(UserInfo, forKey: "UserInfo")
userName = ""
}
但是当我单击“保存”按钮时,它显示 尝试设置非属性列表对象
。我认为, UserInfo
数组需要转换为 NSData
。请告诉我该怎么做?
最佳答案
您需要使您的自定义对象符合NSCoding
协议(protocol),并实现encode和decode方法。完成后,您可以使用编码方法创建一个 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 = ""
}
关于ios - 如何在 swift 中将自定义数组转换为 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528908/