SystemStatusBar :: NSStatusItem的选择器无法识别

时间:2014-11-13 19:18:07

标签: cocoa swift selector nsstatusitem nsstatusbar

我在点击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,但似乎有一些我遗漏但却无法弄清楚的东西。

1 个答案:

答案 0 :(得分:2)

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(_:));