这听起来像个愚蠢的问题,但我现在一直试图找到一个解决方案,但我仍然不知道该怎么办。我正在使用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
被禁用,这意味着选择器无法正常工作。如果选择器调用类中的方法,一切正常。这是我得到的截图:
答案 0 :(得分:0)
感谢Martin R.指出在我的代码中我没有为UIMenuItem设置一个明确的目标,导致它是nil
,最终是self
。
调用addItemsToMenu
后,在insertItem
函数中添加了以下行解决了问题:
menu.item(at: 4)?.target = Singleton.sharedInstance