NSNotification无法识别的选择器发送到Swift中的实例

kmi*_*las 13 ios swift

我按如下方式设置了一个观察者,其中包括以下logYes()功能:

class SplashPageVC: UIViewController {

    func logYes() {
        println("Yes");
    }

    override func viewDidLoad() {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "logYes:", name: "userValid", object: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经将以下IBAction连接到一个按钮:

class LoginVC: UIViewController {
    @IBAction func loginSubmitted(sender : AnyObject) {
        NSNotificationCenter.defaultCenter().postNotificationName("userValid", object: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

点击按钮时出现以下错误:

[_TtC13Explorer12SplashPageVC self.logYes:]: unrecognized selector sent to instance 
Run Code Online (Sandbox Code Playgroud)

我尝试了一堆不同的选择器,没有运气:

logYes
logYes:
logYes()
logYes():
Run Code Online (Sandbox Code Playgroud)

我没有想法.任何见解?tyvm :)

参考文献:
在postNotificationName中没有发送
NSNotification :在Swift 中的swift委托中称为NSNotificationCenter addObserver

Tim*_*Tim 33

我认为你的原始选择器(logYes:)是正确的 - 这是你应该重写的功能.通知观察器函数接收发布的通知作为参数,因此您应该写:

func logYes(note: NSNotification) {
    println("Yes")
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果声明的logYes像"private func logYes(notification:NSNotification)"那么可能会得到一个无法识别的选择器异常 (7认同)
  • @ sharky101,它由发送者(任何UIControl)调用,因此在您的选择器中应该可以为发送者访问,而不仅仅是为操作指定目标的类.干杯,祝你好运:) (3认同)
  • 是! 我正在吠叫错误的树.我♥你是男人.不能选择这个作为另外10分钟的接受答案. (2认同)