我有一个接受加速度计数据并将其发布在通知中的类,如下所示:
func notify(accel: accelPoint){
NotificationCenter.default.post(name: Notification.Name("newRawData"), object: nil)
}
并设置了两个对象来观察这一点,第一个是viewController:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(FirstViewController.newRawData), name: Notification.Name("newRawData"), object: nil)
哪个调用函数:
func newRawData(notification: NSNotification){ ...
这很好。
另一个观察者在常规的Swift类中,在应用程序委托中实例化。 (我尝试在创建通知类之前和之后执行此操作):
init(){
NotificationCenter.default.addObserver(self, selector: #selector(FilterManager.newRawData), name: Notification.Name("newRawData"), object: nil)
}
哪个应该调用下面的函数,但是由于某种原因却没有。
@objc func newRawData(){
print("WHYYY")
}
该类的名称是正确的,并且我已经看到观察者正在注册并且通知已发布,所以为什么不像其他类那样通知该类呢?
另外,为什么我必须将第二个类中的
newRawData
函数公开给Objective-C,而不是暴露给newRawData
类中的viewController
呢? 最佳答案
您在AppDelegate中引用了FilterManager类吗?如果没有,请在您的AppDelegate类中添加此代码。也可以使FilterManger单例来解决此问题。
var filterManger = FilterManager()