有人能举个例子,从Cocoa应用程序向通知中心发送测试通知吗?当我点击一个NSButton

推荐答案

Mountain Lion中的通知由两个类处理.NSUserNotificationNSUserNotificationCenter.NSUserNotification是您的实际通知,它有一个标题、一条消息等,可以通过属性设置.要传递已创建的通知,可以使用NSUserNotificationCenter中提供的deliverNotification:方法.苹果文档中有关于NSUserNotification&;NSUserNotificationCenter但是发布通知的基本代码如下所示:

- (IBAction)showNotification:(id)sender{
    NSUserNotification *notification = [[NSUserNotification alloc] init];
    notification.title = @"Hello, World!";
    notification.informativeText = @"A notification";
    notification.soundName = NSUserNotificationDefaultSoundName;

    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
    [notification release];
}

这将生成一个带有标题和消息的通知,并在显示时播放默认声音.你可以通过通知做的事情远不止这些(比如安排通知),这些都在我链接的文档中有详细说明.

一个小问题是,只有当您的应用程序是关键应用程序时,才会显示通知.如果希望无论应用程序是否为键都能显示通知,则需要为NSUserNotificationCenter指定一个委托,并重写委托方法userNotificationCenter:shouldPresentNotification:,使其返回YES.NSUserNotificationCenterDelegate的文档可以在here中找到

下面是一个向NSUserNotificationCenter提供委托,然后强制显示通知的示例,无论您的应用程序是否关键.在应用程序的AppDelegate中.m文件,按如下方式编辑:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
    return YES;
}

在AppDelegate中.h、 声明该类符合NSUserNotificationCenterDelegate协议:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>

Objective-c相关问答推荐

CLLocationManager startUpdatingLocation 未调用 locationManager:didUpdateLocations: 或 locationManager:didFailWithError:

Objective-C - 将浮点数转换为字符串的其他方法

UICollectionView:一行或一列

Objective-C 中的实例变量是否默认设置为 nil?

如何使 UIView 动画序列重复和自动反转

核心数据 - 如何获取具有最大值属性的实体

UISearchbar 键盘搜索按钮操作

调用了dismissViewControllerAnimated,但没有解除ViewController

重复符号 _OBJC_METACLASS_$_ClassName

自定义 UINavigationBar 背景

反转 NSString 文本

获取字符串的最后 2 个字符?

在我滚动之前,数据不会加载到 UITableView 中

Select 具有受支持架构的目标以便在此设备上运行

允许用户从 UILabel 中 Select 文本进行复制

通过点击状态栏滚动到 UITableView 的顶部

如何让 UITextView 检测网站、邮件和电话号码的链接

将 NSDate 舍入到最接近的 5 分钟

使用正则表达式查找/替换 NSString 中的子字符串

如何调整 UIToolBar 左右内边距