ios - Selector 方法必须与观察者所在的实例相同吗?
问题描述
通常,addObserver
两者的代码都Selector method tag with @Objc
编码在同一个实例(实例化类)中。
可以将Selector
不同实例的 a 传递给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
}
}
推荐阅读
- javascript - 如何在 JavaScript 中将 UTC 日期和时间转换为 EST 日期和时间?
- python - 如何以行格式打印数据帧差异结果
- c# - 如何在 WPF 的功能区中访问 DataTemplate 中的文本块?
- python - 使用 pyodbc 从 SQL Server 中提取数据
- python - 图形化 Python 密码生成器:tkinter
- json - 节点名称中 JSON Xpath 的通配符
- python - Python权限被拒绝linux
- python - 字符串相乘-Leetcode using Karatsuba algorithm with Python
- html - 从 Spring Boot 项目的 application.properties 中检索 Google Maps API 密钥?
- regex - 将第一行追加到以下行直到下一个空白行?