0

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に翻訳しましたが、何かが欠けているようですが、理解できないようです.

4

1 に答える 1

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

する必要があります

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

AppDelegateメソッドが 1 つの引数を取るため、アクション ターゲットはインスタンスであり、セレクター「somethingHappened:」(コロン付き) です。

Swift 2.2/Xcode 7.3の場合は

statusBarItem.action = #selector(somethingHappened(_:));
于 2014-11-13T19:30:13.330 に答える