2015-09-11 5 views
0

Я пытаюсь сохранить данные на NSUserDefaults. Вот мой кодКак преобразовать пользовательский массив в NSData в swift?

@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. Скажите, пожалуйста, как я могу это сделать?

+1

Читайте на 'NSKeyedArchiver' в одном решении. – rmaddy

ответ

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 = "" 
} 
Смежные вопросы