如何通知其他Cocoa应用程序偏好被更改?

Ily*_*lya 5 macos cocoa nsuserdefaults

我正在通过类改变.GlobalPreferences NSUserSubstitutions首选项NSUserDefaults(通过PyObjC,但除此之外).

此首选项控制OS X的文本替换功能(例如,可以用"©"代替"(c)").

更改首选项后,我希望它立即应用于所有正在运行的应用程序.通过"系统偏好设置"进行更改时,会立即应用.我应该如何通知其他应用程序立即应用它?

更新:这是项目:https://github.com/ikonst/mac-tex-substitutions

Gui*_*ume 2

使用以下代码:

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(gotIt:) name:nil object:nil];
Run Code Online (Sandbox Code Playgroud)

我能够检测到系统偏好设置应用程序会NSUserReplacementItemsEnabledChanged在文本替换偏好设置更改时发布一条名为“通知”的通知。

知道了这一点,您现在可以在更改首选项后发布适当的通知,以告知所有打开的应用程序:

[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"NSUserReplacementItemsEnabledChanged" object:self];
Run Code Online (Sandbox Code Playgroud)


请记住,这NSUserReplacementItemsEnabledChanged在任何地方都没有记录,因此这种行为可能随时改变。