Невозможно отправить NSDistributedNotification от плагина SIMBL - PullRequest
0 голосов
/ 31 августа 2011

Я разрабатываю плагин SIMBL для TextEdit, плагин добавляет дополнительное меню. В меню есть несколько пунктов, которые при выборе (помимо прочего) отправляют сообщения в мое собственное приложение. Для этого я использовал NSDistributedNotificationCenter, однако я не могу отправлять уведомления из моего пакета в TextEdit.

Я проверил код, который использую в отдельном приложении, и, похоже, он работает, поэтому я не понимаю, почему мой пакет в TextEdit не может отправлять сообщения.

Код почтового уведомления:

NSDictionary *user = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"TextEdit", @"applicationName", 
                      @"289", @"applicationVersion", 
                      @"1", @"menuItem", nil];
NSString *observedObject = @"com.drake.DDX";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center postNotificationName:@"DDXNotification" object:observedObject userInfo:user     deliverImmediately:YES];

И код в приемнике:

NSString *observedObject = @"com.drake.DDX";
    NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(receiveNotification:) name:@"DDXNotification" object:observedObject];

Этот код работает, если я добавляю его в другое приложение, поэтому я думаю, что в TextEdit или SIMBL происходит что-то, чего я не знаю.

Я проверил, что пункты меню правильно выполняют метод, показав NSAlert в TextEdit, как только метод будет выполнен.

Любая помощь приветствуется.

(Правка) Я обнаружил, что когда я публикую уведомление, если словарь userInfo равен нулю, мое приложение получает уведомление, поэтому возникает проблема с отправляемым мной NSDictionary или сигнатурой метода получателя.

1 Ответ

0 голосов
/ 31 августа 2011

Я не знаю, почему ваш NSDistributedNotificationCenter не работает.Однако я думаю, что могу дать вам другой способ создания обложки для этого кота.

Создайте схему URL в соответствии с аргументами myapp: // menu / menu_item?.

Важным моментом являетсяСхема myapp.

Следуйте информации здесь , чтобы зарегистрировать ваше приложение в качестве обработчика этой схемы по умолчанию.

Теперь в ответ на выбор меню составьте соответствующий URL-адрес, используя myappв качестве схемы и звоните

NSURL* url = [NSURL URLWithString:@"myapp://menu/menu_item"];
[[NSWorkspace sharedWorkspace]openURL:url];
...