3

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

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

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

最令人困惑的是,在我更新到 Mavericks 之前,一切都运行良好。我想更新中发生了一些变化,但我不知道是什么。

谢谢您的帮助。

4

1 回答 1

4

我的猜测是nil。确保您分配 (valid and non-nil)titleinformativeText.

我想其他属性的值无效,例如otherButtonTitle可能会阻止显示通知。

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

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

这是适用于 Mac OS X 10.9 (Mavericks) 的应用程序委托的最小测试:

- (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;
}
于 2013-11-26T19:27:30.473 回答