选择器到单例内的方法

时间:2017-07-23 15:47:17

标签: swift methods singleton

这听起来像个愚蠢的问题,但我现在一直试图找到一个解决方案,但我仍然不知道该怎么办。我正在使用Swift 3.0,我遇到一个问题,从另一个类中的选择器调用单例类中的方法。我的单身课程如下:

class Singleton : NSObject {

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

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

}

然后,这是我从中调用Singleton中包含的方法的类:

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 个答案:

答案 0 :(得分:0)

感谢Martin R.指出在我的代码中我没有为UIMenuItem设置一个明确的目标,导致它是nil,最终是self。 调用addItemsToMenu后,在insertItem函数中添加了以下行解决了问题:

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