2011-12-25 15 views
5

Zmieniam preferencje użytkownika .GlobalPreferences NSUserSubstitutions poprzez klasę NSUserDefaults (przez PyObjC, ale to poza tym punktem).Jak sygnalizować innym aplikacjom Cocoa, że ​​preferencje zostały zmienione?

Ta preferencja kontroluje podstawienia tekstowe wyposażone (np który może zastąpić „©” za „(c)”) z OS X.

Po zmianie preferencji, chcę go natychmiast zastosować we wszystkich uruchomionych aplikacji. Po zmianie w Preferencjach systemowych natychmiast stosuje się. Jak powinienem zasygnalizować innym aplikacjom natychmiastowe zastosowanie?

Aktualizacja: Oto projekt: https://github.com/ikonst/mac-tex-substitutions

+1

Może nie być sposobu, aby to zrobić. 'NSUserDefaults' [wykorzystuje pamięć podręczną aplikacji] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/UserDefaults/AccessingPreferenceValues/AccessingPreferenceValues.html#//apple_ref/doc/uid/10000059i- CH3-97569), który jest okresowo aktualizowany. Twoja aplikacja może zażądać natychmiastowej synchronizacji dla siebie, ale chyba, że ​​inne aplikacje zarejestrują się do działania na "NSUserDefaultsDidChangeNotification", prawdopodobnie po prostu czekają na automatyczną synchronizację. Może jednak coś przeoczyłem. –

+0

Tak bym pomyślał, gdyby Preferencje systemowe nie zdążyły natychmiast zastosować, ale to się udaje ... więc musi być jakiś sposób! – Ilya

+0

Hmm, dobry punkt. –

Odpowiedz

2

Korzystanie poniższy kod:

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

byłem w stanie wykryć, że słupkach aplikacji Preferencje systemowe powiadomienie o nazwie NSUserReplacementItemsEnabledChanged gdy zmiana podstawienia tekstowe preferencje .

Wiedząc, że można teraz dodawać odpowiedniego powiadomienia po zmianie preferencji niech wiedzą wszystkie otwarte aplikacje:

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


pamiętać, że NSUserReplacementItemsEnabledChanged nie jest udokumentowane w dowolnym miejscu, więc to zachowanie można zmienić w dowolnym momencie.

+0

Dzięki. Nawiasem mówiąc, jest to powiadomienie o włączeniu i wyłączeniu tej funkcji. Powiadomienie o zmianie listy to "NSSpellServerReplacementsChanged". – Ilya

+0

Cieszę się, że pomogłem, a dzięki za połów :) – Guillaume

+0

Hej Guillaume! Zmieniłem ustawienia proxy sieci i użyłem powyższego kodu do nasłuchiwania powiadomień, które zostały wyzwolone i nie znalazłem żadnego. Czy wiesz, co może być przyczyną. Mam pytanie otwarte tutaj https://stackoverflow.com/questions/36210701/notification-that-tells-the-system-that-preferences-plist-has-changed – brumbrum

Powiązane problemy