我正在尝试为使用JavaScript for Automation编写的小应用程序创建停靠菜单。这是我正在使用的代码的精简版本:
ObjC.import("Cocoa");
// Create the menu
var menu = $.NSMenu.alloc.initWithTitle('Menu');
var item = menu.addItemWithTitleActionKeyEquivalent('Item', null, '');
// Register the app delegate
if (typeof $.AppDelegate === 'undefined') {
ObjC.registerSubclass({
name: 'AppDelegate',
superclass: 'NSObject',
protocols: ['NSApplicationDelegate'],
methods: {
"applicationDockMenu:": function (sender) {
$.NSLog('applicationDockMenu');
return menu;
}
}
})
}
// Create the app delegate instance
var appDelegate = $.AppDelegate.alloc.init;
// Assign to the app
$.NSApp.setDelegate(appDelegate);
如果将其粘贴到Apple脚本编辑器中,将其另存为应用程序并运行它,当您右键单击停靠栏图标时,您将看到新的菜单项(有时在您创建另一个停靠栏菜单之前不会显示停靠菜单应用程序处于活动状态。)
问题是;单击停靠栏中的应用程序图标或退出应用程序将导致它在控制台中崩溃:
22/03/2016 22:33:59.895 applet[752]: -[AppDelegate handleEvent:withReply:error:]: unrecognized selector sent to instance 0x7fe8e55cf340
看起来有些东西试图调用handleEvent:withReply:error:
,这在NSApplicationDelegate协议中没有定义。
任何想法是什么导致了这种行为?