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