3

我正在为我的应用程序编写首选项,将其注册为在登录时启动(使用LSSharedItemListAPI)。一切正常,我的应用程序会根据复选框状态切换它在用户登录项中的存在。现在我想解决另一个问题,当用户实际从Accounts.prefPane.

使用 Notification Watcher,我看到分布式通知中心发送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

4

1 回答 1

14

NSConcreteNotification是抽象类的私有子NSNotification类。你不应该使用这个NSConcreteNotification类。如果要检查类是否为NSNotification,请使用-isKindOfClass:

if ([sender isKindOfClass:[NSNotification class]]) {
  ...
}
于 2010-01-24T08:14:11.523 回答