【问题标题】:How to reset saved data back to defaults?如何将保存的数据重置为默认值?
【发布时间】:2010-09-27 20:33:05
【问题描述】:

我正在使用 NSUserDefaults 在我的应用中实现保存的数据,如下所示:

[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:0],@"mySetting",nil]];
// check
int firstLaunch = [[NSUserDefaults standardUserDefaults] integerForKey:@"mySetting"];
// set
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"mySetting"];

现在出于开发目的,我希望能够删除保存的数据并返回默认设置,而不必每次都删除应用并重新安装它。有没有快速的方法来做到这一点?我认为 resetStandardUserDefaults 可以完成这项工作,但事实并非如此。

【问题讨论】:

    标签: ios cocoa-touch nsuserdefaults


    【解决方案1】:

    对于您希望恢复为默认值的键,-removeObjectForKey: 将从应用首选项中删除其定义。在所有条件相同的情况下,这意味着后续调用 -<type>ForKey: 将返回注册的默认值。

    【讨论】:

      【解决方案2】:

      以下 sn-p 对我有用。

      NSDictionary *defaultsDict = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
      for (NSString *key in [defaultsDict allKeys])
          [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
      
      [[NSUserDefaults standardUserDefaults] synchronize];
      

      【讨论】:

      • 不要认为在字典迭代键上有任何需要调用[defaultsDict allKeys]for in
      【解决方案3】:

      您是否尝试在调用重置后重新加载默认值?正如 PEZ 所说:

      例如

      [NSUserDefaults resetStandardUserDefaults];
      [NSUserDefaults standardUserDefaults];
      

      这将清除标准集中的所有默认值和加载。

      如果你只想像从你的 sn-p 中看到的那样闪击一个值,那么 Graham 的 -removeObjectForKey 建议更容易。

      编辑:纠正了我对类方法的误用。

      【讨论】:

      • 这并没有改变 +resetStandardUserDefaults 没有做斯蒂芬想要的事实。
      • 我同意您的代码更合适,但例如这不起作用(而格雷厄姆的回答有效):[NSUserDefaults resetStandardUserDefaults]; [NSUserDefaults 标准用户默认值]]; NSArray *offlinePages = [[NSUserDefaults standardUserDefaults] objectForKey:OFFLINE_PAGES];它仍然在调试中返回一个值。你知道为什么吗?出于这个原因,我对你的回答投了反对票,如果你能解释为什么这是错误的,我会投票给你。文森特
      • 我确实说过格雷厄姆的建议更适合重置单个键。您将此键设置为应用程序默认值是多少?
      • 我发现我总是必须在完成所有操作后进行同步才能使更改生效,所以可能是这样:[NSUserDefaults resetStandardUserDefaults]; [[NSUserDefaults standardUserDefaults] 同步]; [NSUserDefaults 标准用户默认值]; [[NSUserDefaults standardUserDefaults] 同步];
      【解决方案4】:

      文档对 resetStandardUserDefaults 有这样的说法:

      随后调用 standardUserDefaults 创建一个新的 共享用户默认对象与 标准搜索列表。

      如果有一些积极的(一厢情愿?)的想法,这看起来就是你所需要的。 =)

      【讨论】:

      • 它还说“同步对共享用户默认对象所做的任何更改”,这非常强烈地表明它不是 Steph 需要的。
      • 不要在长时间睡眠后重新激活这个线程(太晚了),但我在同一条船上 resetStandardUserDefaults 没有做我期望它用像 重置 :\
      • LOL(对不起,我知道这不是开玩笑,只是你说得那么雄辩)。
      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多