NSConcreteNotification получено, но не определено? - PullRequest
3 голосов
/ 24 января 2010

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

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

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

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

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

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

Работает Mac OS X10.6.2

1 Ответ

13 голосов
/ 24 января 2010

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

if ([sender isKindOfClass:[NSNotification class]]) {
  ...
}
...