我在 OS X 10.8 中的通知中心遇到了困难。我编写了一个包装器来通过 JNA 提供对 NSUserNotification 和 NSUserNotificationCenter 类的 Java 访问,但功能有限。我能够发送通知,只要 .jar 通过 JavaApplicationStub 从 .app 包运行,它就会显示。但是,当通知样式设置为“警报”时,以下行始终会记录到控制台:
11/29/12 8:37:12.537 PM usernoted[162]: Failed to validate application at (null) -67061
Run Code Online (Sandbox Code Playgroud)
接下来,单击通知会导致以下内容记录到控制台:
11/29/12 8:38:15.291 PM usernoted[162]: Cannot find originating application to launch for event action. file://localhost/Users/geoffodonnell/Projects/bin/GuiTest.app/ is not the same app as the one that sent the original notification.
Run Code Online (Sandbox Code Playgroud)
我确实为 NSUserNotificationCenter 类提供了委托,但是这些方法只有在 .jar 在包之外执行时才会运行。当然,这违背了目的,因为通知永远不会显示。
任何人都可以对上述两个错误提供任何见解吗?
我想知道 JavaApplicationStub 是否妨碍了我,但是当涉及到典型应用程序将如何响应通知中心事件时,我一无所知。
在上图中,您可以在OS X上看到两个通知.第一个来自我的应用程序,第二个来自Apple的Reminders.app.在图像中,您可以看到otherButtonTitle"完成"和actionButtonTitle"稍后".
第二个通知,即来自Reminders.app的通知,表现完全不同.它会使鼠标指向下方的这个小箭头指示单击时有更多操作.事实上,你只需要点击一次在"后来",它会给你一对夫妇更多可供选择的方案.
但是,我无法使用相同的行为来处理我的通知.鼠标悬停时我没有得到小箭头,只需点击"稍后"即可显示更多选项(通知只是被解雇).只有在"稍后"按住鼠标按钮时才会显示更多选项,这一点并不明显.
我错过了一些明显的东西吗?如何让我的通知与Reminders.app中的通知完全相同?
相当简单,我有一个应该发送通知的应用程序,但如果应用程序是最前面的,它将不会这样做.从NSUserNotificationCenter类参考:
用户通知中心保留决定是否向用户呈现所传递的用户通知的权利.例如,如果应用程序已经位于最前面(委托可以覆盖此操作),它可能会禁止通知.
从我可以收集的内容来看,它与userNotificationCenter:shouldPresentNotification:NSUserNotificationCenterDelegate协议参考中显示的方法有关,但我无法弄清楚如何实现它.我已经将我的课程设置为NSUserNotificationCenterDelegate,所以不是这样.
有任何想法吗?
编辑:在我设置为NSUserNotificationCenterDelegate的类中,我使用它来尝试覆盖原始方法,如果应用程序位于最前面,则默认为NO:
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
但没有任何反应.
是否(现在)有正式支持的方式在我的应用程序运行时更改OSX通知中心的NSUserNotifications图标?我在网上搜索,但答案并不是"最近的",所以我只想仔细检查.
我想在它的标题/名称旁边显示当前播放的spotify曲目的艺术作品
我到现在为止所做的事真的很难看:
暂时用IconFamily生成的.icns文件替换我的应用程序的CFBundleIconFile (我知道我不应该在包中修改anthing,但我不是要将应用程序带到App Store)
重启通知中心"忘记"它最终缓存了图标
NSRunningApplication*notificationCenter = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.notificationcenterui"]; [notificationCenter终止];
(我知道我真的不应该这样做)
我在互联网上搜索过,但发现的唯一方法是循环播放
- (void)userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification
Run Code Online (Sandbox Code Playgroud)
如下所示:https://stackoverflow.com/a/21365269/1795083
但是,我的应用程序有时会在短时间内显示多个通知,因此这不是真正有效也不是有效.当按下垃圾按钮时,邮件应用程序如何处理它.必须至少有一个被调用的私有方法.有没有人遇到过它?提前致谢
NSUserNotification当我的应用程序中的某些内容发生时,我出现了.即使应用程序是最前面的应用程序(即始终显示),有没有办法显示通知?
(如果我在其他应用程序中,它会显示出来)
是否有任何非私密方式可以知道NSUserNotificationCenterMountain Lion 中的通知中心()中有多少通知?不仅是来自我的应用的通知,还来自所有应用.
所以,总结一下,我想要做的是检索这里显示的通知数量:

我试图搜索,但我找不到有关此信息.有任何想法吗?
提前致谢!
macos cocoa objective-c nsusernotification nsusernotificationcenter
我是OSX开发的新手,我正在创建一个应用程序,当事情发生时触发通知.但是当应用程序是关键应用程序时它没有显示通知,因为它是默认行为.即使应用程序是关键应用程序,我也想展示它们.但是我只找到了用objective-c编写的这个问题的解决方案,但现在我正在使用Swift.我想知道如何用Swift实现它.
nsusernotification nsusernotificationcenter swift osx-yosemite
Mac基础知识:通知会通知您,可以使用文本输入字段创建交互式警报:
例如,您可以直接通过通知回复聊天.
我该如何实现它?例如,我有一个通知:
let notification = NSUserNotification.init()
notification.hasActionButton = true
notification.actionButtonTitle = "Agree"
notification.title = "Header"
notification.informativeText = "Text."
NSUserNotificationCenter.default.deliver(notification)
Run Code Online (Sandbox Code Playgroud) 我不确定我是否出了问题,但是从我能找到的例子中可以看出来.我写了那个小小的helloworld.
#import <Foundation/Foundation.h>
#import <Foundation/NSUserNotification.h>
int main (int argc, const char * argv[])
{
NSUserNotification *userNotification = [[NSUserNotification alloc] init];
userNotification.title = @"Some title";
userNotification.informativeText = @"Some text";
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它:
cc -framework Foundation -o app main.m
Run Code Online (Sandbox Code Playgroud)
它编译,我可以执行它,但它不会显示任何东西.由于某些原因,没有任何东西出现.我读到如果应用程序是主要角色,则可能无法显示通知.如何让它显示通知?
macos ×6
cocoa ×5
objective-c ×2
swift ×2
delegates ×1
java ×1
jna ×1
osx-yosemite ×1
swift3 ×1
xcode ×1