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