同步 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?