Cocoa 如何构建在Mac OS 10.6上运行并支持NSUserNotificationCenter的应用程序?

Cocoa 如何构建在Mac OS 10.6上运行并支持NSUserNotificationCenter的应用程序?,cocoa,osx-mountain-lion,Cocoa,Osx Mountain Lion,我做了很多研究,但就是找不到我想要的: 目前,我的应用程序的部署目标和基本SDK都设置为10.8,并且运行良好。我可以正确地将通知发布到山狮新通知中心 为了构建一个同样在Mac OS10.6下运行的应用程序,我将部署目标设置为10.6并构建了它()。不幸的是,应用程序在10.6上崩溃,崩溃报告详细说明找不到NSUserNotificationCenter(没有操作系统版本处理) -- 因此,我必须做的是检查NSUserNotificationCenter类是否存在: notificationCe

我做了很多研究,但就是找不到我想要的: 目前,我的应用程序的
部署目标
基本SDK
都设置为
10.8
,并且运行良好。我可以正确地将通知发布到山狮新通知中心

为了构建一个同样在Mac OS
10.6
下运行的应用程序,我将部署目标设置为10.6并构建了它()。不幸的是,应用程序在10.6上崩溃,崩溃报告详细说明找不到NSUserNotificationCenter(没有操作系统版本处理)

--

因此,我必须做的是检查NSUserNotificationCenter类是否存在:

notificationCenterIsAvailable = (NSClassFromString(@"NSUserNotificationCenter")!=nil);
并基于此布尔标志进行操作

但对于不能基于此标志的代码,例如:

  • 界面
    。:{
  • 或者类属性中对通知中心的引用类型:
    NSUserNotificationCenter*Center

我的第一个想法是在运行时动态更改类头,即根据类是否存在添加方法和属性来处理通知中心,但这看起来非常复杂?!

这些都是编译问题,并且在基本SDK为10.8时都会很好。
中心
指针可以如果
NSUserNotificationCenter
不存在,则保持在
nil
,因此,您可以将其作为一个标志来检查您是否在测试后的代码运行中执行通知


EDIT事实上,将其保留为
nil
意味着您甚至不需要检查它;只需按正常方式发送消息,如果指针为
nil
,它们将被忽略(除非消息的创建成本很高,并且您希望节省一些CPU周期).

因此,即使是像
userNotificationCenter:(nssernotificationcenter*)center这样的委托方法也应该表示通知:
(void)userNotificationCenter:(nssernotificationcenter*))center didActivateNotification:
是否被编译器自动清除?它正在工作,谢谢!最近的崩溃一定有其他原因。