我正在使用 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
?