导致应用程序响应OS X用户默认值的更改

时间:2017-02-11 04:35:23

标签: macos nsuserdefaults nsdistributednotification

这可能听起来很疯狂,但我需要更新OS X用户默认值(专门针对Dock.app),然后让应用程序以某种方式识别已经进行了更改并做出相应的响应。

我知道这可能以某种方式,因为在“系统偏好设置”中更改设置后,它会立即生效。不幸的是,手动defaults write没有这种情况。

这是我到目前为止所尝试的:

  1. 暂停Dock进程。
  2. $ defaults write com.apple.dock launchanim -bool false
  3. 在基本程序中运行:[[NSDistributedNotificationCenter defaultCenter] postNotificationName:NSUserDefaultsDidChangeNotification object:nil];
  4. 不幸的是,这个通知似乎没有效果。恢复Dock后,无法识别更改(实际上,它也无法在“系统偏好设置”中识别)。

    在这种情况下我是否可以使用其他(可能是未记录的)通知名称?或者用其他方式表明这一点?

    请注意,在这种情况下,仅杀死Dock 不是选项

    如果我真的对此疯狂,我可能会使用一些代码注入方法(mach-inject?)来强制Dock调用[[NSUserDefaults standardUserDefaults] synchronize],但我更感兴趣的是更容易和更少侵入方法首先,如果它们存在。

1 个答案:

答案 0 :(得分:0)

好的,这并没有完全回答原始问题(导致任何应用响应用户默认更改),但它是什么我本来想做的,希望它对其他人也有用。

基本上,系统上有一个私有API可以即时更新Dock首选项。这由Dock.prefpane使用。由于@Ssswift在评论中指出了一个更具体的问题,要求提供相同类型的信息,我在那里发布了完整的答案。

请参阅https://stackoverflow.com/a/45788114/5390105