2

設定を行うアプリケーションが 1 つあります。それらの設定を使用し、別のアプリケーションも使用します。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"] は常に最初に読み取られた値です。

最初のアプリケーションでは、Shared User Defaults Controller を使用して設定を読み書きしています。それがこの問題に関係するかどうかはわかりません。

2 番目のアプリケーションが常に最新の値を取得するように強制するにはどうすればよいですか?

4

1 に答える 1

4

+[NSUserDefaults resetStandardUserDefaults]2 番目のプログラムを呼び出して+[NSUserDefaults standardUserDefaults]、新しいインスタンスを強制的に作成し、次に呼び出されたときにディスクから値をリロードできるはずです。最初の-synchronizeプログラムを呼び出すことは、更新されたデフォルトがディスクに書き込まれることを確認するための正しいアプローチです (この点で NSUserDefaultsController がどのように動作するかはわかりません)。

+[NSUserDefaults resetStandardUserDefaults]standardUserDefaults にアクセスするたびに呼び出すと、頻繁に行うとパフォーマンスが低下する可能性があることに注意してください。

于 2012-05-19T18:35:54.810 に答える