Cocoa:用户通知从未被传递

3
我正在尝试发送本地通知,它的形式如下:

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

但是通知没有出现。我知道有时候如果应用程序处于前台,通知就不会显示,但在交付时它不是这样的情况。在系统偏好设置中,我确保允许来自我的应用程序的通知,甚至覆盖了userNotificationCenter:shouldPresentNotification:方法以始终返回YES,但它仍然不会呈现通知。
最令人困惑的是,一切都很正常,直到我更新到Mavericks。我想更新中可能有些改变,但我找不出原因。
感谢您的帮助。
1个回答

4

我猜测某些内容为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;
}

是的!我没有明确设置“操作按钮标题名称”,Lion从来没有因此给我带来问题,但显然有些事情已经改变。谢谢! - Elbimio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接