NSUserDefaults (Mac OS X 10.9) を使用して文字列値を保存しています (まだ存在しない場合):
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
_kUpdatesSharedLocationPath = [standardUserDefaults stringForKey:UpdatesSharedLocationPath];
if (_kUpdatesSharedLocationPath == nil) {
_kUpdatesSharedLocationPath = [@"/Volumes/My.store"];
[standardUserDefaults setObject:@"/Volumes/My.store" forKey:VestigaUpdatesSharedLocationPath];
}
[standardUserDefaults synchronize];
これは正常に機能しており、ファイル システムの下に値を書き込みます。/Users/piotr/Library/Preferences/com.company.MyApp.plist
次に、コンソールからこの値を変更したいと思います (このプロセス中、アプリケーションは実行されていません)。
$ defaults write com.company.MyApp UpdatesSharedLocationPath -string SomeOtherValue
この変更はファイル システムに正しく反映されています。/Users/piotr/Library/Preferences/com.company.MyApp.plist
defaults writeしかし、アプリケーションを再度起動すると、値はコンソールで以前と同じままです。[standardUserDefaults stringForKey:UpdatesSharedLocationPath]値を読み取り、 で検査し[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]ます。さらに、ファイル システムの値( /Users/piotr/Library/Preferences/com.company.MyApp.plist)がコンソールで変更前の値に戻ります。
ドメインなしで値を編集しようとしましたが、同じ結果になりました:
$ defaults write UpdatesSharedLocationPath -string SomeOtherValue
さらに、デフォルトでこのキーを削除しようとしました
$ defaults delete com.company.MyApp UpdatesSharedLocationPath
が、削除前の値で再作成されました。
それは私のアプリのようで、コンソールプログラム[NSUserDefaults standardUserDefaults]を使用して行ったすべての変更を完全に無視しています。defaultsそれは期待される動作ですか?で別のドメインを指定する必要がありますdefaultsか?
によって管理されている値を (アプリの外部から) 変更するにはどうすればよいNSUserDefaultsですか?