无法接收来自通知中心的通知

Posted

技术标签:

【中文标题】无法接收来自通知中心的通知【英文标题】:can't receive notifications from Notification Center 【发布时间】:2020-11-05 09:39:21 【问题描述】:

我有一个简单的应用程序: 第一个VC:

类视图控制器:UIViewController

override func viewDidLoad() 
    super.viewDidLoad()
    NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)



override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "secondVC")
    self.present(vc, animated: true, completion: nil)

第二个VC:

类 SecondVC: UIViewController

override func viewDidLoad() 
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(SecondVC.testFunc(notification:)), name: NSNotification.Name("test"), object: nil)


@objc func testFunc(notification: NSNotification)         
    print("!!!!!!!!!!!!!!!!")


deinit 
    NotificationCenter.default.removeObserver(self)

我从来没有看到过“!!!!!!!!!!!!!!!!”,我做错了什么?

【问题讨论】:

【参考方案1】:

发生的情况是您从第一个视图控制器在 viewDidLoad 中发布通知,然后在 viewDidAppear 上您推送第二个视图控制器并然后订阅通知中心。那时您的通知已经被触发,因此您没有收到它。您的第二个视图控制器将仅接收在订阅通知中心后触发的通知。创建一个计时器,它会在视图出现后几秒钟内触发通知,推送您的第二个视图控制器,您将看到它正在工作

【讨论】:

你能写一个例子吗?我不明白 您的第二个视图控制器将只接收在订阅通知中心后发布的通知。在您的代码示例中,您首先发布通知,然后展示您的第二个视图控制器并订阅以接收来自通知中心的通知。您没有收到任何通知的原因现在应该很清楚了,因为在您的第二个视图控制器订阅接收它们之后不会发布进一步的通知。您需要做的是确保在您订阅通知中心后发布您的通知。【参考方案2】:

在您上面提到的代码中,您首先发布通知,然后为其添加观察者。因此,为了调用 testFunc 方法,您需要先 addObserver 然后发布通知。

您可以在 firstVC 中添加几秒钟的延迟来发布通知。

override func viewDidLoad() 
      super.viewDidLoad()
      DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) 
           NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)
      

【讨论】:

以上是关于无法接收来自通知中心的通知的主要内容,如果未能解决你的问题,请参考以下文章

来自通知中心的推送通知不起作用,但在 FCM 中它正在工作

通知中心注册授权异常

我正在使用推送工具包并接收消息,但通知中心未显示该消息

xamarin Forms Azure 通知中心

如何控制通知中心的 APN 条目数

我正在使用通知服务扩展,但无法在通知中获取图像,如何在通知中心获取图像?