Cocoa:用户通知永远不会被传递

时间:2013-11-18 14:36:40

标签: cocoa notifications nsusernotification nsusernotificationcenter

我正在尝试发送本地通知,它看起来像这样:

NSUserNotification *notification = [[NSUserNotification alloc] init];
//set title, subtitle, and sound
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];

但是通知没有出现。我知道,如果应用程序位于最前面,但有时会发送通知,但在交付时则不会。在系统首选项中,我确保允许来自我的应用程序的通知,我甚至覆盖了userNotificationCenter:shouldPresentNotification:方法以始终返回YES,但它仍然不会显示通知。

最令人困惑的是,在我更新到Mavericks之前,一切正常。我想在更新中发生了一些变化,但我无法弄清楚是什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我的猜测是nil。确保您要分配(有效和非零)titleinformativeText

我认为其他属性(例如otherButtonTitle)的值无效可能会阻止通知显示。

您的控制台中是否有任何错误消息?

使用调试器或NSLog()语句来评估分配给通知的值。如果NSUserNotification指针为零,您也可以看到此问题(不是您发布的代码的情况,但值得一提)。

以下是适用于Mac OS X 10.9(Mavericks)的app委托的最小测试:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSUserNotificationCenter* unc = [NSUserNotificationCenter defaultUserNotificationCenter];
    unc.delegate = self;

    NSUserNotification* notice = [[NSUserNotification alloc] init];
    notice.title = @"title"; // notifications need a title, or informativeText at minimum to appear on screen
    //notice.informativeText = @"informativeText";

    NSLog(@"notification: %@, notification center:%@", notice, unc);
    [unc deliverNotification:notice];
}

// The notifications will always dispaly even if we are in the foreground
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification
{
    return YES;
}