为啥我的 onNext 没有触发我的 rx 订阅?

Posted

技术标签:

【中文标题】为啥我的 onNext 没有触发我的 rx 订阅?【英文标题】:Why isn't my rx subscription triggered on my onNext?为什么我的 onNext 没有触发我的 rx 订阅? 【发布时间】:2020-01-08 13:27:00 【问题描述】:

玩弄Rx Swift 我遇到了我的subscription 没有触发的情况。

我有两个viewControllers。第一个有一个labelsubscriber 应该更新,如下所示:

func listen() 
   print("In func")
   let sec = storyboard?.instantiateViewController(withIdentifier: "secondvc") as! SecondViewController

   sec.myRx.subscribe(onNext: 
    print("SUBSCRIBED", $0)
       self.rxLabel.text = $0
   )


如果您转到第二个viewController,则会有一个按钮触发onNext 事件。像这样:

    var myRx = PublishSubject<String>()

    @IBAction func myButton(_ sender: Any) 
        myRx.asObserver().onNext("Hello")
    

所以,在我看来,当myButton 在第二个viewController 中按下时,第一个viewController 中的label 应该在返回到viewController 时更新。但据我所知,该功能已被触发,但 subscription 根本没有被触发。

【问题讨论】:

你确定你正在展示你正在实例化的同一个视图控制器吗?我问是因为那部分不在 sn-p 中。 @nanibi 你是对的。我改变了它,但它仍然没有影响结果。不过感谢您的注意。编辑答案。 @nanibi 好的,现在解决了。你是对的。没有在订阅者上使用与用于呈现第二个 vc 的实例相同的实例是一个问题。我创建了一个新实例并订阅了它。谢谢您的帮助。如果您希望我投票并检查答案,请写下正确的回复:) 【参考方案1】:

请确保您订阅的PublishSubject 与您发布活动的同一PublishSubject 相同。确认这一点的最简单方法是设置断点并检查地址。

【讨论】:

以上是关于为啥我的 onNext 没有触发我的 rx 订阅?的主要内容,如果未能解决你的问题,请参考以下文章

捕获订阅 OnNext 操作可能引发的异常

创建和订阅简单的观察队列

为啥 UIView 框架上的 observable 只在订阅后触发一次

订阅 Observable 时如何在 onNext 案例中获取状态码

RxSwift 调用 bind 立即触发 vs subscribe(onNext: )

UART RX 中断过早触发