您如何将自定义对象保存到NSUserDefaults?
NSUserDefaults.standardUserDefaults().setObject(obj, forKey: "object")
NSUserDefaults.standardUserDefaults().synchronize()
该对象属于Spotify iOS SDK中的SPTAuthViewController类,因此我无法对其进行编辑以添加编码器和解码器方法。如何将对象编码为NSData对象以将其存储在NSUserDefaults中?
答案 0 :(得分:0)
您无法将自定义对象存储到用户默认值中。您只能存储"属性列表对象" (NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象)。
为了将自定义对象保存到用户默认值,您必须将其转换为其中一种类型。
您可以使自定义对象符合NSCoding协议。为此,您必须实施init(coder:)
和encode(coder:)
方法。 (我相信方法名称的快速形式 - 我最近在Objective-C中工作,所以我的Swift正在生锈。)你如何实现这些方法取决于你的课程。通常,您会多次调用encodeObject:forKey:
来对对象的属性进行编码。
一旦您的自定义对象符合NSCoding,您就可以使用NSKeyedArchiver
方法archivedDataWithRootObject()
将其转换为NSData。然后使用NSKeyedUnarchiver
方法unarchiveObjectWithData()
将其从NSData转换回原始对象。
我刚刚意识到您正在尝试将视图控制器对象(SPTAuthViewController
保存到用户默认值。您不应该序列化和保存视图控制器对象。控制器对象不应该用于保存应用程序数据。