ios - Selector 方法必须与观察者所在的实例相同吗?

标签 ios swift callback selector

通常,代码addObserver带有@Objc 的Selector 方法标记 都在同一个实例(实例化类)中编码。

可以将一个Selector从不同的实例传递给addObserver吗?

这样做的原因是因为 Selector 行为大部分时间都是回调。一些回调方法是常用的,可以编写成 CommonCallBack 类,使用示例如下:

class SomeViewController{

  override func viewDidLoad() {
    ...

    let common = CommonCallback()

    NotificationCenter.default.addObserver(
      self, 
      selector: #selector(common.methodA), 
      name: "notificationName", 
      object: nil
    )

  }

}

class CommonCallback{

  @Objc func methodA() { 
    // doing A 
  }

}

问题是我不断收到 unrecognized selector sent to instance

最佳答案

你也可以这样实现

class SomeViewController {

    override func viewDidLoad() {
        let common = CommonCallback()
        common.enableObserver = true
    }

}

class CommonCallback{
    var enableObserver : Bool!
    override func viewDidLoad() {
        if enableObserver {
            NotificationCenter.default.addObserver(
                self,
                selector: #selector(common.methodA),
                name: "notificationName",
                object: nil
            )
        }
    }
    @objc func methodA() {
        // Your code here
    }
}

关于ios - Selector 方法必须与观察者所在的实例相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156334/

相关文章:

ios - 无法从 ios 中的 react-native-firebase 接收通知消息

iphone - 将 subview 添加到 UITableViewController 的 View

ios - 无法通过调用 FirstViewController 类中的函数隐藏 SecondViewController 类中的 View

ios - 组 TableView 标题显示在 admob 横幅上

javascript - 如何设计具有多个回调的 Javascript 库 API?

ios - CKFetchNotificationChangesOperation 返回旧通知

ios - 恢复购买功能 - Swift

ios - 无法关闭 UIAlertController

javascript - D3缩放回调

ruby - Rails 模型中 around_create 回调的目的是什么?