【问题标题】:Saving cell accessory to NSUserDefaults将单元附件保存到 NSUserDefaults
【发布时间】:2013-01-08 08:31:40
【问题描述】:

我之前问过一个问题,here 回答了关于保存手机配件状态的问题。我现在正在玩 NSUserDefaults。我已经在我的应用程序中成功保存了一些选项,但似乎无法将单元配件的状态保存到 NSUserDefaults。

经过多次尝试,我得出的结论是我不知道要保存什么或在哪里保存以及在哪里调用保存的选项。

谁能指出我正确的方向?

谢谢,

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

【问题讨论】:

  • 您知道您首先必须将其转换为 NSData 对象吗?

标签: objective-c cocoa-touch nsuserdefaults


【解决方案1】:

在您引用代码 sn-ps 的问题中,使用名为 _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

【讨论】:

  • @mattFllr 很高兴看到我的回答很有帮助 :-) 在您提出有关 SO 的问题之前,请不要忘记查阅 Apple 提供的文档。对于这个特定的问题,NSUserDefaults (link) 的类文档可能会告诉您您需要知道的一切。当然,我的建议需要谨慎对待,因为有时很难找到合适的文档...
【解决方案2】:

对于不是 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 协议。如果不是这样,您应该提供一个实现。

【讨论】:

  • 我遇到的问题是确定需要转换的内容、召回的地点和地点。请参阅上一个问题中 herzbube 的已回答代码。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
相关资源
最近更新 更多