通常,代码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/