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

Raf*_*ael 10 cocoa osx-mountain-lion

我做了很多研究,但我找不到我正在寻找的东西:目前,我Deployment TargetBase SDK我的应用程序都设置为10.8,并且运行完美.我可以正确地将通知发布到Mountain Lions新通知中心!

要构建也在Mac OS下运行的应用程序10.6,我将部署目标设置为10.6并构建它(按照此线程中的建议).不幸的是,应用程序在10.6崩溃了,崩溃报告详细说明找不到NSUserNotificationCenter(没有操作系统版本处理).

-

所以我必须做的是检查NSUserNotificationCenter类是否存在:

notificationCenterIsAvailable = (NSClassFromString(@"NSUserNotificationCenter")!=nil);
Run Code Online (Sandbox Code Playgroud)

并基于此布尔标志进行操作.

但是Code不能基于这个标志,比如:

  • 界面 ..: <NSUserNotificationCenterDelegate> {
  • 或者通知中心的引用类型:NSUserNotificationCenter *center在类的属性中?

我的第一个想法是在运行时动态改变类头,即根据类是否存在来添加处理Notificaion Center的方法和属性,但这看起来真的很复杂?!

tro*_*foe 3

这些都是编译问题,只要 Base SDK 是 10.8 就没有问题。如果不存在,指针center可以保留在该处,因此您可以使用它作为标志来检查您是否正在执行通知或不在测试后运行的代码中。nilNSUserNotificationCenter

编辑事实上,离开它nil意味着您甚至不需要检查它;只需照常发送消息,如果指针在,它们将被忽略nil(除非消息的创建成本很高并且您想节省一些 CPU 周期)。