将自定义对象(在另一个自定义对象中)保存到Swift 3中的用户默认值

时间:2016-10-09 21:58:17

标签: ios swift

我创建了两种类型的自定义对象:

  1. 第一个名为Contact的对象有4个存储字符串的字段。
  2. 第二个对象名为ContactList,有一个字段,用于存储我的第一个对象[Contact]的列表。
  3. 在我的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,所以非常感谢任何帮助!

0 个答案:

没有答案