2011-12-25 7 views
5

私は。グローバルプレビューNSUserSubstitutionsの設定をNSUserDefaultsクラス(PyObjCを介して、それはポイントの外にあります)を通して変更しています。他のCocoaアプリケーションに、環境設定が変更されたことを通知するにはどうすればよいですか?

このプリファレンスは、プリファレンスを変更した後、OS Xの置換が備わっていますテキスト(例えば、「(C)」の「©」に置き換えることができた)

を制御し、私はそれが実行中のすべてのアプリケーションにすぐに適用したいです。システム環境設定で変更されるとすぐに適用されます。他のアプリにすぐにそれを適用するよう通知する必要がありますか?

更新:ここではプロジェクトがあります:次のコードを使用して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'で動作するように登録していない限り、おそらく単に自動同期を待つだけです。しかし、私は何かを見逃しているかもしれません。 –

+0

システム環境設定がすぐには適用できないが、それは管理していると思っていただろう。 – Ilya

+0

うーん、良い点。 –

答えて

2

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

を私はシステム環境設定のアプリケーションの投稿したテキスト置換の嗜好が変化NSUserReplacementItemsEnabledChangedという名前の通知を検出することができました。

あなたが今開いているすべてのアプリケーションを知っているように設定を変更した後、適切な通知を投稿することができ、ことを知っ:NSUserReplacementItemsEnabledChangedはどこにも文書化されていないことに注意してください

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


を、ので、この振る舞いいつでも変更できます。

+0

ありがとうございます。ところで、これは機能の有効化と無効化の通知です。リストを変更するための通知は "NSSpellServerReplacementsChanged"です。 – Ilya

+0

助けてくれてうれしい、とキャッチのためにありがとう:) – Guillaume

+0

ちょっとギョーム!ネットワークプロキシの設定を変更し、上記のコードを使用して、トリガーされた通知をリッスンし、見つからなかった。あなたは何が理由であるか知っていますか?私はここで質問を開きますhttps://stackoverflow.com/questions/36210701/notification-that-tells-the-system-that-preferences-plist-has-changed – brumbrum

関連する問題