2017-07-23 27 views
0

這聽起來像一個愚蠢的問題,但我一直在努力尋找一個解決方案几個小時,現在我仍然不知道該怎麼做。我正在使用Swift 3.0,我在調用另一個類中的選擇器的單例類中的方法時遇到了問題。我的單身類如下:選擇器到單身人士的方法

class Singleton : NSObject { 

    static let sharedInstance = Singleton() 
    private override init() {} // defeats instantiation 

    func myAction() { 
     // do something useful... 
    } 

} 

然後,這裏是從我打電話包含在辛格爾頓方法的類:

class StatusBarPresenter { 

    func addItemsToMenu(menu: NSMenu) { 
     ... 
     menu.insertItem(withTitle: "Disconnect this network", 
         action: #selector(Singleton.sharedInstance.myAction), 
         keyEquivalent: "D", at: 4) 
     ... 
    } 

} 

的Xcode不抱怨的代碼...它編譯沒有任何錯誤或警告,但選擇器不起作用。我添加到菜單中的UIMenuItem被禁用,這意味着選擇器不工作。如果選擇器調用類中的方法,則一切正常。這是我得到的截圖:

A screenshot of the error

+1

你在哪裏設置*目標,*菜單項行動?比較例如https://stackoverflow.com/a/1970202/1187415。 –

+0

我完全忘了它......謝謝!將添加一個答案。非常感謝你。 :) –

回答

0

感謝Martin R.爲指出,在我的代碼我沒有設置爲UIMenuItem一個明確的目標,從而導致它被nil最終self 。 下面一行添加到addItemsToMenu功能之後調用insertItem解決了這個問題:

menu.item(at: 4)?.target = Singleton.sharedInstance