2

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

    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"] 始终是第一次读取的值。

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

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

4

1 回答 1

4

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

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

于 2012-05-19T18:35:54.810 回答