通知发送,接收不到通知的处理办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通知发送,接收不到通知的处理办法相关的知识,希望对你有一定的参考价值。
参考技术A 场景描述:
图中 我的订单 控制器下包含:两个控制器 个人订单 和 队员订单 。
点击按钮 个人订单 ,在 我的订单 发送通知,在 个人订单 里面收到通知,处理数据。
点击按钮 队员订单 ,在 我的订单 发送通知,在 队员订单 里面收到通知,处理数据。
我们在 我的订单 控制器切换的按钮点击事件里面发送通知
我们在两个控制器 个人订单 和 队员订单 里面接受通知
问题:
首次进这个 我的订单 ,然后切换到 队员订单 , 队员订单 里面没有收到通知,在 个人订单 可以收到。来回切换几次, 个人订单 和 队员订单 就都可以收到了。
通过 NSLog(@"Thread:%@",[NSThread currentThread]); 或 [NSOperationQueue currentQueue] 我们可以查到 push 时的线程和接收通知时的线程为主线程,输出: Thread:<NSThread: 0x170072d80>number = 1, name = main 。
接着再看一下苹果官方的说明:
百度翻译了一下:
定期通知中心在通知发布的线程上提供通知。分布式通知中心在主线程上提供通知。有时,您可能需要在由您决定的特定线程上传递通知,而不是通知中心。例如,如果运行在后台线程中的对象正在侦听来自用户界面的通知,如窗口关闭,则希望接收后台线程中的通知而不是主线程。在这些情况下,您必须捕获通知,因为它们在默认线程上传递,并将它们重定向到相应的线程。
如上,也就是,通知接收的线程是基于通知发送的线程。如果接收不到通知方发送的消息,很有可能是因为它们不在同一个线程上。因此,我们可以把通知的发送方放到和接收方同一个线程中。
解决:发送通知时做如下操作,解决了push时发送通知接收不到的情况。
控制台的输出:
最后,有一点要注意,添加通知接受者和移除通知接受者的操作是成对的。如下:
以上是关于通知发送,接收不到通知的处理办法的主要内容,如果未能解决你的问题,请参考以下文章