我正在为TextEdit开发一个插件,这个插件增加了一个额外的菜单。该菜单有许多项,当选择这些项时(其中包括)会将消息发送到我自己的应用程序。为此,我一直在使用NSDistributedNotificationCenter,但是我无法在TextEdit中从我的捆绑包中发送通知。
我检查了我在单独的应用程序中使用的代码,它似乎可以工作,所以我不明白为什么我的TextEdit包不能发送消息。
帖子通知代码:
NSDictionary *user = [NSDictionary dictionaryWithObjectsAndKeys:
@"TextEdit", @"applicationName",
@"289", @"applicationVersion",
@"1", @"menuItem", nil];
NSString *observedObject = @"com.drake.DDX";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center postNotificationName:@"DDXNotification" object:observedObject userInfo:user deliverImmediately:YES];接收器中的代码:
NSString *observedObject = @"com.drake.DDX";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(receiveNotification:) name:@"DDXNotification" object:observedObject];如果我将它添加到我的另一个应用程序中,这段代码似乎可以工作,所以它让我认为在TextEdit或SIMBL中发生了一些我不知道的事情。
我已经通过在方法执行时在TextEdit中显示一个NSAlert来检查菜单项是否正确地执行了该方法。
任何帮助都是非常感谢的。
(编辑)我发现当我发布一个通知时,如果userInfo字典是空的,那么我的应用程序就会收到通知,所以我发送的NSDictionary或接收方方法签名似乎有问题。
发布于 2011-08-31 08:00:47
我不知道为什么你的NSDistributedNotificationCenter不能工作。然而,我想我可以给你一种不同的方法来剥这只猫的皮。
按照myapp://menu/menu_item?参数设计一个URL方案。
重要的一点是myapp方案。
按照信息here将您的应用程序注册为此方案的默认处理程序。
现在,为了响应菜单选择,使用myapp作为方案编写适当的URL,并调用
NSURL* url = [NSURL URLWithString:@"myapp://menu/menu_item"];
[[NSWorkspace sharedWorkspace]openURL:url];https://stackoverflow.com/questions/7250291
复制相似问题