Как быстро преобразовать пользовательский массив в NSData?

Я пытаюсь сохранить данные 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 . Пожалуйста, скажите мне, как я могу это сделать?


person Alamin    schedule 11.09.2015    source источник
comment
Прочтите NSKeyedArchiver как одно из решений.   -  person rmaddy    schedule 11.09.2015


Ответы (1)


Вам необходимо привести свой пользовательский объект в соответствие с протоколом 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 = ""
}
person Chris Slowik    schedule 11.09.2015