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

标签 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 = ""

}

但是当我单击“保存”按钮时,它显示 尝试设置非属性列表对象 。我认为, UserInfo 数组需要转换为 NSData 。请告诉我该怎么做?

最佳答案

您需要使您的自定义对象符合NSCoding协议(protocol),并实现encode和decode方法。完成后,您可以使用编码方法创建一个 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 = ""
}

关于ios - 如何在 swift 中将自定义数组转换为 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528908/

相关文章:

iphone - 具有时间延迟的 performSelector 在 for 循环中不起作用 - iPhone

ios - Cordova IOS 构建错误(清理项目)

ios - Swift 从 builtInDualCamera 保存 16 位深度图像

iphone - 操纵 nsmutabledata

ios - JSON格式:以正确的顺序获取输出

ios - 如何使 UIBarButton 在禁用时不灰显?

ios - 即使在解除分配后,GPUImageFilters 中的某些内容仍保留在内存中

ios - 使用 UIActivityIndi​​catorView 进行登录过程,但因为我使用的是线程,所以我无法停止它

javascript - 我找不到使用 WKWebView 和 Java Script 模拟单击​​/点击的方法

python - Objective-C 将 NSData 压缩为 Python gzip 字符串?