ios - 将自定义对象保存到 NSUserDefaults - 无法设置编码器和解码器方法

标签 ios swift nsuserdefaults nsdata spotify

如何将自定义对象保存到 NSUserDefaults?

NSUserDefaults.standardUserDefaults().setObject(obj, forKey: "object")
NSUserDefaults.standardUserDefaults().synchronize()

该对象属于 Spotify iOS SDK 中的 SPTAuthViewController 类,因此我无法编辑它来添加编码器和解码器方法。如何将对象编码为 NSData 对象以将其存储在 NSUserDefaults 中?

最佳答案

您不能将自定义对象存储到用户默认值中。您只能存储“属性列表对象”(NSString、NSData、NSDate、NSNumber、NSArray 或 NSDictionary 对象)。

为了将自定义对象保存为用户默认值,您必须将其转换为其中一种类型。

您可以让您的自定义对象符合 NSCoding 协议(protocol)。为此,您必须实现 init(coder:)encode(coder:) 方法。 (我相信这是方法名称的快速形式——我最近一直在使用 Objective-C,所以我的 Swift 变得生疏了。)你如何实现这些方法取决于你的类。通常,您会多次调用 encodeObject:forKey: 来对对象的属性进行编码。

一旦您的自定义对象符合 NSCoding,您就可以使用 NSKeyedArchiver 方法 archivedDataWithRootObject() 将其转换为 NSData。然后使用 NSKeyedUnarchiver 方法 unarchiveObjectWithData() 将它从 NSData 转换回原始对象。

编辑:

我刚刚意识到您正在尝试将 View Controller 对象 (SPTAuthViewController) 保存为用户默认值。您不应序列化和保存 View Controller 对象。 Controller 对象不应用于保存应用程序数据。

关于ios - 将自定义对象保存到 NSUserDefaults - 无法设置编码器和解码器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637256/

相关文章:

ios - 类型为 Void 的 appendAttributedString 返回值

json - Swift JSON 到模型类

ios - 在数组上使用 NSUserDefaults

ios - 如何获取didChangeObject :(id)anObject (NSfetchedResultsController)中对象的值

iphone - 服务器/客户端iphone应用程序的任何示例,其中服务器和客户端均为iOS设备?

ios - Auto property synthesize will not synthesize property - 新警告 iOS8.3

swift - WatchOS 警告 : rejected resignFirstResponder when being removed from hierarchy

ios - NavigationLink 似乎只占用一点空间

iphone - WatchKit 扩展看不到应用组 NSUserDefaults 的更新

Android 相当于 iOS 中的 NSUserDefaults