收到NSConcreteNotification,但没有定义?

时间:2010-01-24 08:00:58

标签: objective-c cocoa preferences

我正在为我的应用编写首选项,该注册表会在登录时注册它(使用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

1 个答案:

答案 0 :(得分:13)

NSConcreteNotification是抽象NSNotification类的私有子类。您不应该使用NSConcreteNotification类。如果您想检查某个班级是否为NSNotification,请使用-isKindOfClass:

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