NSConcreteNotification получен, но не определен?

Я пишу настройки для своего приложения, которое регистрирует его для запуска при входе в систему (используя LSSharedItemList API). Все идет нормально, и мое приложение переключает свое присутствие в элементах входа пользователя при статусе флажка. Теперь я хочу решить другую проблему, когда пользователь фактически удаляет приложение из «Элементов входа» в Accounts.prefPane.

Используя Notification Watcher, я вижу, что распределенный центр уведомлений отправляет уведомление com.apple.loginItemsListDidChnage (обратите внимание на опечатку), поэтому я добавляю наблюдателя для этого уведомления с тем же селектором (то есть IBAction), который обрабатывает флажок в окне настроек (который, на самом деле, [не] регистрирует приложение из/в элементы входа).

Проблема возникает, когда я пытаюсь сравнить класс отправителя действия, которое переключает мое приложение в качестве элемента входа. Используя [sender description] и [sender class], я вижу класс NSConcreteNotification, но как только я пытаюсь провести сравнение с ним - код прерывается, говоря, что такой класс не определен:

if ([[sender class] isEqualTo:[NSConcreteNotification class]]) {
  ...
}

Если я пытаюсь сравнить отправителя с NSNotification - то поток не попадает в эту ветку.

Может быть, мне не хватает некоторых важных знаний о распределенных уведомлениях в Mac OS X?

Запуск Mac OS X 10.6.2


person Eimantas    schedule 24.01.2010    source источник
comment
Не говоря уже о том, что я не думаю, что isEqualTo: доступен как метод класса, поэтому это должно вызывать исключение «не отвечает на селектор». (И даже версия экземпляра предназначена для сценариев. .apple.com/mac/library/documentation/cocoa/Reference/ Для общих целей вы бы использовали isEqual:.) Если бы было уместно проверить, является ли это точно тем же классом, вы бы использовали здесь оператор == .   -  person Peter Hosey    schedule 24.01.2010


Ответы (1)


NSConcreteNotification является частным подклассом абстрактного класса NSNotification. Вы не должны использовать класс NSConcreteNotification. Если вы хотите проверить, является ли класс NSNotification, используйте -isKindOfClass::

if ([sender isKindOfClass:[NSNotification class]]) {
  ...
}
person kennytm    schedule 24.01.2010