我无法从嵌入视图控制器中快速订阅publishSubject

时间:2019-10-04 08:54:02

标签: rx-swift

我有包含ContainerView的MainViewController。 和ContainerView嵌入了表示ThirdViewController的segue

在ThirdViewController中,我创建PublishSubject,如果在PickerView中选择某些内容,则将值发送到PublishSubject中。 enter image description here

然后MainViewController从ThirdViewController订阅PublishSubject。

因此,如果成功完成,在MainViewController中,我将从PickerView中获得价值。

但是我的问题是我什么也收不到,甚至可能无法订阅。

出什么问题了???我该怎么办?

MainViewController

if  let thirdVC = self.storyboard?.instantiateViewController(withIdentifier:"ThirdViewController") as? ThirdViewController {
                    print("third segue success")

                    thirdVC.selectFeelingSubject.subscribe(onNext : {
                        print($0)

                    }).disposed(by: self.disposeBag)

ThirdViewController

var selectFeelingSubject = PublishSubject<String>()



 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    selectFeelingSubject.onNext(feelingArray[row])

}

1 个答案:

答案 0 :(得分:0)

代码:

if  let thirdVC = self.storyboard?.instantiateViewController(withIdentifier:"ThirdViewController") as? ThirdViewController {
    print("third segue success")
    thirdVC.selectFeelingSubject.subscribe(onNext : {
        print($0)
    })
    .disposed(by: self.disposeBag)

没有提供主视图控制器中的视图控制器。它正在实例化一个全新的视图控制器。

您需要主视图控制器中的实际对象。尝试以下方法:

let thirdVC = self.children[0] as! ThirdViewController
    thirdVC.selectFeelingSubject.subscribe(onNext : {
        print($0)
    })
    .disposed(by: self.disposeBag)

如果您有多个子视图控制器,则需要将0更改为适当的数字,以便获得正确的子视图。