如何将自定义对象保存到 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/