将单元附件保存到NSUserDefaults

时间:2013-01-06 16:52:56

标签: objective-c cocoa-touch nsuserdefaults

我之前曾问过一个有关保存细胞附件状态的问题here。我现在正在玩NSUserDefaults。我已成功在我的应用程序中保存了许多选项,但似乎无法将单元附件的状态保存到NSUserDefaults。

经过多次尝试,我得出的结论是,我不知道保存的内容或位置,以及在何处召回已保存的选项。

任何人都可以指出我正确的方向吗?

谢谢,

编辑:虽然我理解变量可能需要转换,但我很难在需要转换的时间和时间。

2 个答案:

答案 0 :(得分:1)

在引用代码段的问题中,使用名为_accessoryStyle的实例变量。变量的类型为NSMutableArray。假设您仍然拥有此变量,您只需将其内容保存为用户默认值,如下所示:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self._accessoryStyle forKey:@"aKeyName"];

如果您以后想要检索数据,可以这样做:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* immutableData = [userDefaults arrayForKey:@"aKeyName"]];
[self._accessoryStyle setArray:immutableData];

检索稍微复杂一些,因为arrayForKey:会返回不可变的NSArray,而不是NSMutableArray

答案 1 :(得分:0)

对于非NSData,NSDate,NSString,NSArray,NSDictionary,NSNumber的对象(因为它们不能保存在plist文件中),您可以使用这些宏:

#define SetDefaultObjectForKey(object, key) [ [NSUserDefaults standardUserDefaults] setObject: [NSKeyedArchiver archivedDataWithRootObject: object] forKey: key]

#define GetDefaultObjectForkey(key) [NSKeyedUnarchiver unarchivedObjectWithData: [ [NSUserDefaults standardUserDefaults] objectForKey: key] ]

因此,在保存时将它们转换为NSData,并在读取时将它们从NSData解码为其原始类型,前提是该对象实现了NSCoding协议。如果不是这样,您应该提供实施。