我之前问过一个关于保存电池配件状态的问题,在这里得到了回答。我现在正在玩 NSUserDefaults。我已经在我的应用程序中成功保存了许多选项,但似乎无法将单元配件的状态保存到 NSUserDefaults。
经过多次尝试,我得出的结论是我不知道要保存什么或在哪里保存以及在哪里调用保存的选项。
谁能指出我正确的方向?
谢谢,
编辑:虽然我知道变量可能需要转换,但我很难理解需要转换的内容和时间。
我之前问过一个关于保存电池配件状态的问题,在这里得到了回答。我现在正在玩 NSUserDefaults。我已经在我的应用程序中成功保存了许多选项,但似乎无法将单元配件的状态保存到 NSUserDefaults。
经过多次尝试,我得出的结论是我不知道要保存什么或在哪里保存以及在哪里调用保存的选项。
谁能指出我正确的方向?
谢谢,
编辑:虽然我知道变量可能需要转换,但我很难理解需要转换的内容和时间。
在您引用代码片段的问题中,使用名为_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
.
对于不是 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 协议。如果不是这样,您应该提供一个实现。