Javascript 带有NodObjC的NSStatusBar

Javascript 带有NodObjC的NSStatusBar,javascript,cocoa,node.js,nsstatusbar,nodobjc,Javascript,Cocoa,Node.js,Nsstatusbar,Nodobjc,我正在尝试使用NodObjC创建一个带有Node.js的cocoa应用程序。 我一直在创建一个只在MacOS X上作为HTTP服务器运行的应用程序 NodObjC 我想用状态栏上的图标显示服务器状态,如下所示。 我试着这样做: var $ = require('NodObjC'); $.import('Foundation'); $.import('Cocoa'); var systemStatusBar = $.NSStatusBar('systemStatusBar'); var _s

我正在尝试使用NodObjC创建一个带有Node.js的cocoa应用程序。 我一直在创建一个只在MacOS X上作为HTTP服务器运行的应用程序

NodObjC

我想用状态栏上的图标显示服务器状态,如下所示。

我试着这样做:

var $ = require('NodObjC');
$.import('Foundation');
$.import('Cocoa');

var systemStatusBar = $.NSStatusBar('systemStatusBar');
var _statusItem = systemStatusBar('statusItemWithLength', $.NSVariableStatusItemLength);
_statusItem('setHighlightMode', 'YES');
var title = $.NSString('stringWithUTF8String', 'Test');
_statusItem('setTitle', title);
_statusItem('setMenu', systemStatusBar);
但此代码会导致错误

node[15637:707] -[NSStatusItem _setMenuOwner:]: unrecognized selector sent to instance 0x10816d810

tmp/node_modules/NodObjC/lib/id.js:158
    throw e
          ^
NSInvalidArgumentException: -[NSStatusItem _setMenuOwner:]: unrecognized selector sent to instance 0x10816d810
    at Function.msgSend (tmp/node_modules/NodObjC/lib/id.js:156:21)
    at id (tmp/node_modules/NodObjC/lib/id.js:119:15)
    at tmp/test.js:22:3
    at wrapper (tmp/node_modules/NodObjC/lib/imp.js:49:20)
    at Number.<anonymous> (tmp/node_modules/NodObjC/node_modules/node-ffi/lib/callback.js:23:23)
    at ForeignFunction.proxy (tmp/node_modules/NodObjC/node_modules/node-ffi/lib/foreign_function.js:84:20)
    at Function.msgSend (tmp/node_modules/NodObjC/lib/id.js:153:23)
    at id (tmp/node_modules/NodObjC/lib/id.js:119:15)
    at Object.<anonymous> (tmp/test.js:30:1)
    at Module._compile (module.js:456:26)
节点[15637:707]-[NSStatusItem\u setMenuOwner:]:发送到实例0x10816d810的无法识别的选择器
tmp/node_modules/NodObjC/lib/id.js:158
掷e
^
NSInvalidArgumentException:-[NSStatusItem\u setMenuOwner:]:发送到实例0x10816d810的选择器无法识别
在Function.msgSend(tmp/node_modules/NodObjC/lib/id.js:156:21)
at id(tmp/node_modules/NodObjC/lib/id.js:119:15)
在tmp/test.js:22:3
at包装器(tmp/node_modules/NodObjC/lib/imp.js:49:20)
在数字上。(tmp/node_modules/NodObjC/node_modules/node ffi/lib/callback.js:23:23)
在ForeignFunction.proxy(tmp/node_modules/NodObjC/node_modules/node ffi/lib/foreign_function.js:84:20)
在Function.msgSend(tmp/node_modules/NodObjC/lib/id.js:153:23)
at id(tmp/node_modules/NodObjC/lib/id.js:119:15)
反对。(tmp/test.js:30:1)
在模块处编译(Module.js:456:26)
我找不到任何解决此错误的方法。
有谁能给我一些建议吗?

我终于自己想出了办法

var $ = require('NodObjC')
$.import('Cocoa')

var pool = $.NSAutoreleasePool('alloc')('init'),
    app  = $.NSApplication('sharedApplication'),
    statusMenu;



// set up the app delegate
var AppDelegate = $.NSObject.extend('AppDelegate')
AppDelegate.addMethod('applicationDidFinishLaunching:', 'v@:@', function (self, _cmd, notif) {
  var systemStatusBar = $.NSStatusBar('systemStatusBar');
  statusMenu = systemStatusBar('statusItemWithLength', $.NSVariableStatusItemLength);
  statusMenu('retain');
  var title = $.NSString('stringWithUTF8String', "Hello World");
  statusMenu('setTitle', title);
})
AppDelegate.register()

var delegate = AppDelegate('alloc')('init')
app('setDelegate', delegate)

app('activateIgnoringOtherApps', true)
app('run')

pool('release');