Селектор для SystemStatusBar::NSStatusItem не распознан

Я пытаюсь получить событие при нажатии NSStatusItem (выполняется действие). Однако это то, что я вижу в консоли (приложение не падает) - неопознанный селектор отправлен в экземпляр

2014-11-14 00:42:29.565 T1[90662:303] -[NSSystemStatusBar somethingHappened]: unrecognized selector sent to instance 0x61000008c990
2014-11-14 00:42:29.573 T1[90662:303] (
    0   CoreFoundation  
. . .

Это код, с которым я пытаюсь работать:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate
{
    var statusBar = NSStatusBar.systemStatusBar();
    var statusBarItem : NSStatusItem! = NSStatusItem();
    override func awakeFromNib()
    {   
        statusBarItem = statusBar.statusItemWithLength(-1)
        statusBarItem.target = self
        statusBarItem.action = Selector("somethingHappened");
        statusBarItem.menu = nil;
    }
    @IBAction func somethingHappened(sender: NSStatusItem)
    {
        println("Hello from StatusItem");
    }
}

Чтобы понять, что с этим не так, я перевел пару точно похожих руководств по Objective-C на Swift, но, похоже, что-то мне не хватает, но я не могу понять.


person TJ-    schedule 13.11.2014    source источник


Ответы (1)


statusBarItem.target = NSStatusBar.systemStatusBar()
statusBarItem.action = Selector("somethingHappened")

должно быть

statusBarItem.target = self
statusBarItem.action = Selector("somethingHappened:");

Целью действия является экземпляр AppDelegate и селектор "somethingHappened:" (с двоеточием), поскольку метод принимает один аргумент.

Для Swift 2.2/Xcode 7.3 это

statusBarItem.action = #selector(somethingHappened(_:));
person Martin R    schedule 13.11.2014
comment
Клянусь, я сделал это, и это продолжало терпеть неудачу. Возможно, я где-то еще что-то делал не так. Но теперь это работает. Спасибо. - person TJ-; 13.11.2014