终端无法识别更新的用户默认值

时间:2018-02-04 21:24:53

标签: objective-c xcode macos terminal nsuserdefaults

我正在尝试在Mac OS应用程序中更改屏幕截图的保存位置,但这似乎不起作用。

在终端中执行以下命令非常有效。所有屏幕截图都保存在名为屏幕截图的文件夹中(位于我的桌面上),与预期一样。

终端

defaults write com.apple.screencapture location ~/Desktop/Screenshots
killall SystemUIServer

每当我让我的应用程序执行以下代码段时,com.apple.screencapture.plist中的位置值将会改变。

目标C

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.apple.screencapture.plist"];

[defaults setValue:@"/Users/Maarten/Desktop/Screenshots" forKey:@"location"];
[defaults synchronize];

值更改后,我使用终端运行killall SystemUIServer

但不知怎的,这个命令似乎不起作用,因为所有屏幕截图都保存在之前定义的(默认)位置。

1 个答案:

答案 0 :(得分:2)

自10.9(我认为)以来,操作系统会缓存您的偏好。要使缓存无效,您需要终止cfprefsd。因此,首先,通过defaults设置您的首选项,然后运行以下命令:

killall -u $USER cfprefsd

之后,您的偏好应该在不需要重启或其他任何事情的情况下进行。

此外,您可以使用screencapture指定特定屏幕截图的位置,而不是更改系统首选项。您也可以使用此工具指定其他参数。使用man screencapture获取更多信息。

最后,根据Apple的文档,synchronizeNSUserDefaults来说非常有用:

  

<强>同步

     

等待默认数据库的任何挂起的异步更新   并返回;这种方法是不必要的,不应该使用。