10

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

为了构建一个也可以在 Mac OS 下运行的应用程序10.6,我将部署目标设置为 10.6 并构建了它(如本线程中所建议的那样)。不幸的是,该应用程序在 10.6 上崩溃,并且崩溃报告详细说明找不到 NSUserNotificationCenter(无操作系统版本处理)。

--

所以我肯定要做的是检查 NSUserNotificationCenter 类是否存在:

notificationCenterIsAvailable = (NSClassFromString(@"NSUserNotificationCenter")!=nil);

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

但是不能基于这个标志的代码呢,比如:

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

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

4

1 回答 1

3

这些是编译问题,并且在 Base SDK 为 10.8 时一直很好。如果不存在,指针可以保持不变,因此您可以将其用作标志来检查您是否正在执行center通知不在测试后运行的代码中。nilNSUserNotificationCenter

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

于 2012-07-31T09:26:10.813 回答