2011-12-25 5 views
5

Tôi đang thay đổi các tùy chọn .GlobalPreferences NSUserSubstitutions thông qua lớp NSUserDefaults (thông qua PyObjC, nhưng ngoài vấn đề này).Làm cách nào để báo hiệu các ứng dụng Cocoa khác mà tùy chọn đã được thay đổi?

sở thích này kiểm soát thay thế văn bản tính năng (ví dụ có thể thay thế "©" cho "(c)") của OS X.

Sau khi thay đổi các ưu tiên, tôi muốn nó để áp dụng ngay lập tức trong tất cả các ứng dụng đang chạy. Khi nó được thay đổi thông qua System Preferences, nó được áp dụng ngay lập tức. Làm cách nào để tôi báo hiệu các ứng dụng khác áp dụng ngay lập tức?

Cập nhật: Đây là dự án: https://github.com/ikonst/mac-tex-substitutions

+1

Có thể không có cách nào. 'NSUserDefaults' [sử dụng bộ nhớ cache cho mỗi ứng dụng] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/UserDefaults/AccessingPreferenceValues/AccessingPreferenceValues.html#//apple_ref/doc/uid/10000059i- CH3-97569) được cập nhật định kỳ. Ứng dụng của bạn có thể yêu cầu đồng bộ hóa ngay lập tức cho chính nó, nhưng trừ khi các ứng dụng khác đã đăng ký hành động trên 'NSUserDefaultsDidChangeNotification', chúng có thể sẽ chỉ cần chờ đồng bộ hóa tự động. Tôi có thể đã bỏ lỡ một cái gì đó, tuy nhiên. –

+0

Tôi đã nghĩ như vậy, nếu System Preferences không quản lý để áp dụng ngay lập tức, nhưng nó quản lý ... vì vậy phải có một cách! – Ilya

+0

Hmm, điểm tốt. –

Trả lời

2

Sử dụng đoạn mã sau:

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

tôi đã có thể phát hiện rằng bài viết ứng dụng System Preferences thông báo tên NSUserReplacementItemsEnabledChanged khi thay thế văn bản ưu đãi về sự thay đổi .

Biết rằng, bây giờ bạn có thể gửi thông báo đầy đủ sau khi thay đổi các ưu đãi để cho biết tất cả các mở các ứng dụng:

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


Hãy ghi nhớ rằng NSUserReplacementItemsEnabledChanged không ghi nhận bất cứ nơi nào, vì vậy hành vi này có thể thay đổi bất kỳ lúc nào.

+0

Cảm ơn. Nhân đây, đây là thông báo cho phép và tắt tính năng này. Thông báo thay đổi danh sách là "NSSpellServerReplacementsChanged". – Ilya

+0

Rất vui khi được giúp đỡ và cảm ơn vì đã bắt được :) – Guillaume

+0

Hey Guillaume! Tôi đã thay đổi cài đặt proxy mạng và sử dụng mã ở trên để nghe thông báo đã được kích hoạt và không tìm thấy thông báo nào. Bạn có biết những gì có thể là lý do. Tôi có một câu hỏi mở ở đây https://stackoverflow.com/questions/36210701/notification-that-tells-the-system-that-preferences-plist-has-changed – brumbrum