Objective-C NSUserDefaults 缓存会阻止其他应用程序准确读取更改

标签 objective-c nsuserdefaults preferences

我有一个设置首选项的应用程序。它使用这些首选项,另一个应用程序也是如此。当我在第二个应用程序中使用以下代码时,它会正确读取一次首选项。

    NSUserDefaults* settings = [NSUserDefaults standardUserDefaults];
    [settings addSuiteNamed:@"com.WVS.Wrestling-Tools"];
    [settings synchronize]; // this just a shot in the dark.. didn't work

    [self setScoreboardIndex:[settings integerForKey:@"matName"]];

在同一代码的后续调用中,我得到的 [settings integerForKey:@"matName"] 始终是第一次读取的值。

在第一个应用程序中,我使用共享用户默认 Controller 来读取/写入首选项。不确定这对这个问题是否重要。

如何强制第二个应用程序始终获取最新值?

最佳答案

您应该能够在第二个程序中调用 +[NSUserDefaults resetStandardUserDefaults] 来强制 +[NSUserDefaults standardUserDefaults] 创建一个新实例并从磁盘重新加载值下次再叫的时候。在 first 程序中调用 -synchronize 是确保更新的默认值写入磁盘的正确方法(我不确定 NSUserDefaultsController 在这方面的行为方式)。

请注意,如果您经常这样做,每次访问 standardUserDefaults 时调用 +[NSUserDefaults resetStandardUserDefaults] 可能会导致性能下降,因为这可能意味着每次读取都会遇到磁盘命中。

关于Objective-C NSUserDefaults 缓存会阻止其他应用程序准确读取更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667848/

相关文章:

ios - 将 UITableViewCell 中的文本大写

ios - 如何使用 nsuserdefault 或 ios 中的任何其他对象保存动态添加的字段数据, objective-c

android - 在一个首选项页面上隐藏首选项按钮

iPhone 和 NSUserDefaults

python - 什么时候调用 __lldb_init_module?

objective-c - 如何在类里面要求 ARC?

objective-c - Swift 到 Objective-C 中的单例给出未找到 XYZ * 类型的错误属性

objective-c - iOS:NSUserDefaults 和 UIImageViews

swift - 当 NSUserDefaults.standardUserDefaults() 中的值发生变化时调用函数

android - 单击一个时如何继续添加首选项?