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

Posted

技术标签:

【中文标题】NSNotification 无法识别的选择器发送到 Swift 中的实例【英文标题】:NSNotification unrecognized selector sent to instance in Swift 【发布时间】:2014-06-18 21:12:23 【问题描述】:

我设置了一个观察者如下,其中包含logYes()函数:

class SplashPageVC: UIViewController 

    func logYes() 
        println("Yes");
    

    override func viewDidLoad() 
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "logYes:", name: "userValid", object: nil)
    

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

class LoginVC: UIViewController 
    @IBAction func loginSubmitted(sender : AnyObject) 
        NSNotificationCenter.defaultCenter().postNotificationName("userValid", object: nil)
    

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

[_TtC13Explorer12SplashPageVC self.logYes:]: unrecognized selector sent to instance 

我尝试了很多不同的选择器,但都没有成功:

logYes
logYes:
logYes()
logYes():

我没有想法。有什么见解吗? tyvm :)

参考资料:NSNotification not being sent when postNotificationName: calledNSNotificationCenter addObserver in SwiftDelegates in swift?

【问题讨论】:

【参考方案1】:

我认为你原来的选择器 (logYes:) 是正确的——应该重写你的函数。通知观察者函数接收发布的通知作为参数,所以你应该这样写:

func logYes(note: NSNotification) 
    println("Yes")

【讨论】:

是的!我叫错了树。我♥你男人。再过 10 分钟无法选择此作为接受的答案。 顺便说一句,如果像“private func logYes(notification: NSNotification)”这样声明 logYes,可能会得到一个无法识别的选择器异常 @ArthurGevorkyan 拯救了我的一天!但是选择器怎么不能是私有的?不是只在声明的类中调用吗? @sharky101,它由发送者(任何 UIControl)调用,因此发送者应该可以在选择器中访问它,而不仅仅是为操作分配目标的类。干杯,祝你好运:)

以上是关于NSNotification 无法识别的选择器发送到 Swift 中的实例的主要内容,如果未能解决你的问题,请参考以下文章

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

[UICollectionViewCell imageView]:无法识别的选择器发送到实例

UISwipeGesture '发送到实例的无法识别的选择器'

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

无法识别的选择器发送到数组中的实例[重复]

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