NSUserDefaults standardUserDefaults并在控制台中使用“defaults write”编辑值

时间:2014-07-31 12:06:50

标签: macos nsuserdefaults defaults

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

0 个答案:

没有答案