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

时间:2016-04-15 02:26:51

标签: ios swift nsuserdefaults nsdata spotify

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

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

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

1 个答案:

答案 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保存到用户默认值。您不应该序列化和保存视图控制器对象。控制器对象不应该用于保存应用程序数据。