输入' ViewController'没有会员' btnPressed'

时间:2016-11-03 10:05:08

标签: ios swift

我尝试将观察者添加到我的 Swift 3 应用程序中,但是当我想设置应该从观察者调用的方法时,我得到以下错误:

  

键入' ViewController'没有会员' btnShowMorePressed'

函数btnShowMorePressed直接在addOberservers函数下声明。

func addObservers(){

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.btnShowMorePressed(_:)), name: btn1TappedDone, object: nil)
}

func btnShowMorePressed(sender: NSNotification){
    print("btnShowMorePressed was called.")
}

我试图清理项目(Product - > Clean),但仍然给我错误。添加观察者我做错了什么?

4 个答案:

答案 0 :(得分:4)

应该是:

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.btnShowMorePressed), name: btn1TappedDone, object: nil)

是的,它确实识别出sender方法的正确btnShowMorePressed(sender: NSNotification)

答案 1 :(得分:0)

试试这个

NotificationCenter.default.addObserver(self, selector: #selector(self.btnShowMorePressed(sender:)), name: btn1TappedDone, object: nil)

答案 2 :(得分:0)

如果您的代码中只有一个btnShowMorePressed(sender: NSNotification)方法,则可以使用:

NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed), name: btn1TappedDone, object: nil)

但是如果你有相同的方法名但有不同的参数,那么应该这样使用:

NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed(sender:)), name: btn1TappedDone, object: nil)

对于以下情况中的实例,您无法使用第一种方式,因为您得到了" Ambiguous use of 'btnShowMorePressed'"错误:

func btnShowMorePressed(sender: NSNotification){
    print("btnShowMorePressed was called.")
}
func btnShowMorePressed(parameter: String){
    print("btnShowMorePressed was called.")
}

我总是使用第二种方式,因为我更清楚。

答案 3 :(得分:0)

我认为你对如何将选择器传递给方法感到很困惑。

有一条简单的规则需要记住,

  

当您引用同一个班级中的某个方法时,只需撰写#selector(,然后是方法名称和)

就这么简单!

只有在想要引用类之外的方法时,才会附加类名。

所以在这里,它将是#selector(btnShowMorePressed)

完整代码:

func addObservers(){

    NotificationCenter.default.addObserver(self, selector: #selector(btnShowMorePressed), name: btn1TappedDone, object: nil)
}

func btnShowMorePressed(sender: NSNotification){
    print("btnShowMorePressed was called.")
}