【问题标题】:How to build an app that runs on Mac OS 10.6 and supports the NSUserNotificationCenter?如何构建在 Mac OS 10.6 上运行并支持 NSUserNotificationCenter 的应用程序?
【发布时间】:2012-07-31 09:20:39
【问题描述】:

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

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

--

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

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

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

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

  • 接口..: <NSUserNotificationCenterDelegate> {
  • 或类属性中对通知中心的引用类型:NSUserNotificationCenter *center

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

【问题讨论】:

    标签: cocoa osx-mountain-lion


    【解决方案1】:

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

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

    【讨论】:

    • 所以即使像userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:这样的委托方法也会被编译器自动清除?
    • 它工作正常,谢谢!最近的崩溃肯定有其他原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多