我有一个接受加速度计数据并将其发布在通知中的类,如下所示:

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()

10-08 17:16