咆哮通知 - 不会使用框架(Mist)触发通知
Growl Notification - Won't fire notification using framework (Mist)
我正在为Growl 1.3.1 SDK开发一个小型包装器。更具体地说,我想将Growl打包到我的应用程序中,这样即使用户没有Growl,他们仍然可以获得通知。我之前安装了Growl,我的代码会触发一个通知。从那以后,我卸载了Growl,现在只使用框架;雾,我相信它叫雾。然而,当我现在启动代码(Growl已卸载)时,不会触发任何通知!以下是我目前正在使用的代码:
#import "growlwrapper.h"
void showGrowlMessage(std::string title, std::string desc) {
std::cout << "[Growl] showGrowlMessage() called." << std::endl;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[GrowlApplicationBridge setGrowlDelegate: @""];
[GrowlApplicationBridge
notifyWithTitle: [NSString stringWithUTF8String:title.c_str()]
description: [NSString stringWithUTF8String:desc.c_str()]
notificationName: @"Upload"
iconData: nil
priority: 0
isSticky: NO
clickContext: nil
];
[pool drain];
}
int main() {
showGrowlMessage("Hello World!", "This is a test of the growl system");
return 0;
}
我还有合适的Growl注册词典,正在使用进行编译
g++ growlwrapper.mm -framework Growl -framework Foundation -o growltest
这个代码有什么问题吗?你知道它为什么不开火吗?
编辑:似乎上面的代码运行得很好。只需要在运行循环中,使用适当的Growl字典内容。
我不是Growl的权威,但我有一个很好的预感:当Growl应用程序安装时,像这样的一次性通知会起作用,因为运行的应用程序有一个运行循环,可以从中驱动UI。在这里的示例中,没有运行循环,因此,这个一次性应用程序不可能发出任何通知——它还没来得及发出通知就已经死了。我想如果你制作了一个Cocoa应用程序的样板,然后从applicationDidFinishLaunching:
调用showGrowlMessage
,但在你终止/退出该应用程序之前,我敢打赌它会起作用。至少你应该试一试。
编辑:如果您创建一个新的Cocoa非文档应用程序,并将以下方法添加到appDelegate类,它将使用Mist(即应用程序内)Growl成功显示通知。
@implementation SOAppDelegate
@synthesize window = _window;
- (void)showGrowlMessageTitled: (NSString*)title description:(NSString*) desc
{
NSLog(@"[Growl] showGrowlMessage() called.");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[GrowlApplicationBridge notifyWithTitle: title
description: desc
notificationName: @"Upload"
iconData: nil
priority: 0
isSticky: NO
clickContext: nil];
[pool drain];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[GrowlApplicationBridge setGrowlDelegate: (NSObject<GrowlApplicationBridgeDelegate>*)self];
[self showGrowlMessageTitled: @"Foo" description: @"Bar"];
}
- (NSDictionary *) registrationDictionaryForGrowl
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithObject: @"Upload"], GROWL_NOTIFICATIONS_ALL,
[NSArray arrayWithObject: @"Upload"], GROWL_NOTIFICATIONS_DEFAULT,
nil];
}
@end
因此,简而言之,原始代码的问题不仅在于runLoop问题,还在于它没有将真正的委托(即根据需要实现标头中描述的委托方法的对象)传递给GrowlApplicationBridge(它传递了一个空字符串)。您肯定仍然需要一个runLoop,但这还不是全部——使用这个框架还有额外的、非可选的设置。
- 函数如何通知用户它基于函数原型抛出异常?
- 如何在ECS框架中更新组件数据和通知系统
- 当 I2C 值在C++中发生变化时收到通知
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 如何在点击通知时捕获用户的点击操作
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 如何在不设置值的情况下通知 c++ 未来?
- 使用 ISdigit 通知任何检测到的非法字符
- Qt:如何通知对象已建立涉及它的信号槽连接
- 提升进程间named_condition_any不通知
- Windows Toast 通知不适用于 MS CPP 示例代码
- C++ Poco - 如何创建通知队列的向量?
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- C++ Windows 通知:使用依赖模板名称
- C++ Poco - 如何向特定线程发送通知/消息?
- 通知 Windows 系统应用程序字体已被卸载/删除
- 咆哮通知 - 不会使用框架(Mist)触发通知