【问题标题】:Selector for SystemStatusBar::NSStatusItem is unrecognizedSystemStatusBar::NSStatusItem 的选择器无法识别
【发布时间】:2016-04-11 05:08:26
【问题描述】:

我试图在单击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,但似乎有些东西我遗漏了但无法弄清楚。

【问题讨论】:

    标签: cocoa swift selector nsstatusitem nsstatusbar


    【解决方案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(_:));
    

    【讨论】:

    • 我发誓我做到了,但它继续失败。也许我在其他地方做错了什么。但它现在有效。谢谢。
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多