如何在swift中将自定义数组转换为NSData?

时间:2015-09-11 17:21:41

标签: ios swift 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。请告诉我该怎么做?

1 个答案:

答案 0 :(得分: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 = ""
}