同步 NSUserDefaults 没有效果

Posted

技术标签:

【中文标题】同步 NSUserDefaults 没有效果【英文标题】:Synchronizing NSUserDefaults has no effect 【发布时间】:2013-10-09 08:04:18 【问题描述】:

在我的 iPhone 应用程序中,我在 [NSUserDefaults standardUserDefaults] 中使用 removeObjectForKey:@"bla"setObject:nil forKey:@"bla" 删除密钥。

但是,当我在将新视图控制器推送到导航控制器堆栈之前执行此操作时,默认值不会更新。

如果我在随后显示的推送控制器中的 viewDidAppear 中执行此操作,则 synchronize 调用会执行预期的操作。

我不明白这种行为。有没有人遇到过类似的问题?

总结: 在推送新 VC 之前删除+同步:NSUserDefaults 保持不变。在viewDidAppear 中删除+同步即可。

我也尝试过使用setPersistentDomain:forName:,但结果是一样的..

编辑:这是代码:

+ (void)deleteDefaultEntries

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

  [defaults removeObjectForKey:@"key1"];
  [defaults removeObjectForKey:@"key2"];
  [defaults removeObjectForKey:@"key3"];
  [defaults removeObjectForKey:@"key4"];

  [defaults synchronize];

【问题讨论】:

你真的只是想保存一个固定的字符串或者连接到 ViewController 的一些变量? 我正在尝试删除 NSUserDefaults 中的键。只是字符串。确切地说是 4 个。 您是否尝试放置 NSLogs 或断点以确保代码按预期执行?特别是同步?另外,也许您在推动 viewcontroller 并在下一个 viewController 中覆盖它之前清除它们?您使用正确,所以它一定是别的东西。 @Grzegorz:是的,我通过并调用了同步。我认为这可能是 ios 中的某种错误。即使我之后立即输出默认值,删除也会撤消。如果我在推送之前调用它,那就是。 ..无论如何,我有我的解决方法。我只是想知道这是我的应用程序的独特问题还是其他...... 【参考方案1】:

您的代码看起来不错,我确定这不是 iOS 错误,但试试这个:

[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]

还可以查看this question。

【讨论】:

以上是关于同步 NSUserDefaults 没有效果的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 不会显示从 NSUserDefaults 加载的数据

如果我没有进行更改,为啥我需要同步 NSUserDefaults?

如何从命令行获取 NSUserDefaults

NSUserDefaults 没有正确保存

如何将 NSUserDefaults 数据与 iCloud 同步

iOS:NSUserDefaults 是不是与 iCloud 同步?