我正在使用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
管理的值?