2011-12-25 24 views
5

我正在更改。GlobalPreferences NSUserSubstitutions優先通過NSUserDefaults類(通過PyObjC,但除此之外)。如何發出其他可可應用程序的偏好已更改?

這個首選項控制了文本替換功能(例如,它可以替代「©」爲「(三)」)OS X.

的改變偏好後,我要立即適用於所有正在運行的應用。當它通過系統首選項進行更改時,它立即生效。我應該如何指示其他應用程序立即應用它?

更新:這裏的項目:https://github.com/ikonst/mac-tex-substitutions

+1

可能沒有辦法。 'NSUserDefaults' [使用每個應用程序緩存](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/UserDefaults/AccessingPreferenceValues/AccessingPreferenceValues.html#//apple_ref/doc/uid/10000059i- CH3-97569),定期更新。你的應用程序可以爲自己請求立即同步,但是除非其他應用程序已經註冊了對'NSUserDefaultsDidChangeNotification'的操作,否則它們可能只是等待自動同步。然而,我可能錯過了一些東西。 – 2011-12-25 01:35:16

+0

我會這樣想的,如果系統偏好設置不能立即應用,但它確實管理......所以一定有辦法! – Ilya 2011-12-25 02:35:29

+0

嗯,好點。 – 2011-12-25 02:38:16

回答

2

使用下面的代碼:

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(gotIt:) name:nil object:nil]; 

我能夠檢測到系統預置應用程序發送的通知名爲NSUserReplacementItemsEnabledChanged的文本替換喜好變化時。

知道了,你現在可以張貼充分通知更改的偏好後,讓知道所有打開的應用程序:

[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"NSUserReplacementItemsEnabledChanged" object:self]; 


記住NSUserReplacementItemsEnabledChanged沒有記錄任何地方,所以這種行爲可以隨時改變。

+0

謝謝。順便說一下,這是啓用和禁用該功能的通知。更改列表的通知是「NSSpellServerReplacementsChanged」。 – Ilya 2011-12-30 22:58:03

+0

很高興有幫助,並感謝您的支持:) – Guillaume 2011-12-30 23:13:16

+0

嘿紀堯姆!我更改了網絡代理設置,並使用上面的代碼來偵聽觸發的通知,但沒有發現任何通知。你知道可能是什麼原因。我有一個問題在這裏打開https://stackoverflow.com/questions/36210701/notification-that-tells-the-system-that-preferences-plist-has-changed – brumbrum 2016-03-24 22:03:33

相關問題