1

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

4

0 回答 0