我创建了两种类型的自定义对象:
[Contact]
的列表。 在我的View Controller中,我有一个ContactList的实例,我想将其保存到用户默认值中。通过查看其他问题,我将以下方法添加到Contact类中(以及使其继承自NSObject和NSCoding)
required init(coder aDecoder: NSCoder) {
self.firstName = (aDecoder.decodeObject(forKey: "first") as? String)!
self.lastName = (aDecoder.decodeObject(forKey: "last") as? String)!
self.phoneNumber = (aDecoder.decodeObject(forKey: "phone") as? String)!
self.email = (aDecoder.decodeObject(forKey: "email") as? String)!
}
func encode(with aCoder: NSCoder){
aCoder.encode(self.firstName, forKey: "first")
aCoder.encode(self.lastName, forKey: "last")
aCoder.encode(self.phoneNumber, forKey: "phone")
aCoder.encode(self.email, forKey: "email")
}
然后在我的ContactList类中,我添加了两个函数:
func saveData(){
let data = NSKeyedArchiver.archivedData(withRootObject: list)
let defaults = UserDefaults.standard
defaults.set(data, forKey:"contacts" )
}
func retrieveData(){
if let data = UserDefaults.standard.object(forKey: "contacts") as? NSData
{
list = NSKeyedUnarchiver.unarchiveObject(with: data as Data) as! [Contact]
}
}
在我的View Controller中,我在我当前的ContactList实例上调用saveData()
。在我的ViewDidLoad
方法中,我有一个赋值给我的变量,它通过创建一个新实例然后在其上调用retrieveData()
来保存它的实例。
然而,当我运行我的程序并将元素添加到ContactList的列表字段中的列表时,退出,然后返回到应用程序,我添加的元素不存在(我有一个表更新并显示ContactList中列表的内容。
我应该让ContactList继承一些东西,还是我只是实现这些方法错了?这是我第一次使用UserDefaults,所以非常感谢任何帮助!