我正在为我的应用编写首选项,该注册表会在登录时注册它(使用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 X 10.6.2
答案 0 :(得分:13)
NSConcreteNotification
是抽象NSNotification
类的私有子类。您不应该使用NSConcreteNotification
类。如果您想检查某个班级是否为NSNotification
,请使用-isKindOfClass:
:
if ([sender isKindOfClass:[NSNotification class]]) {
...
}