Ios rx.sentMessage(#选择器(UIViewController.viewDidLoad))未触发

Ios rx.sentMessage(#选择器(UIViewController.viewDidLoad))未触发,ios,swift,mvvm,rx-swift,reactive-cocoa,Ios,Swift,Mvvm,Rx Swift,Reactive Cocoa,我有一个应用程序使用了RxSwift和MVVM 视图控制器 导入UIKit 导入RxSwift 进口RxCocoa 最终类ProfileViewController:BaseViewController{ var viewModel:可附加! 变量绑定:ProfileViewModel.bindings{ 让viewDidLoad=rx.sentMessage(#选择器(UIViewController.viewDidLoad)) .maptovid() .asDriverOnErrorJus

我有一个应用程序使用了
RxSwift
MVVM

视图控制器


导入UIKit
导入RxSwift
进口RxCocoa
最终类ProfileViewController:BaseViewController{
var viewModel:可附加!
变量绑定:ProfileViewModel.bindings{
让viewDidLoad=rx.sentMessage(#选择器(UIViewController.viewDidLoad))
.maptovid()
.asDriverOnErrorJustComplete()文件
让viewwillbeen=rx.sentMessage(#选择器(UIViewController.viewwillbeen))
.maptovid()
.asDriverOnErrorJustComplete()文件
让viewwilldefine=rx.sentMessage(#选择器(UIViewController.viewwilldefine))
.maptovid()
.asDriverOnErrorJustComplete()文件
让logout=navigationItem.RightBarButtonim?.rx.tap
.maptovid()
.asDriverOnErrorJustComplete()文件
返回ProfileViewModel.Bindings(
connectStore:ViewWillDisplay.asDriver(),
disconnectStore:ViewWillEnglish.asDriver(),
fetchProfileByUserId:viewDidLoad.asDriver()
)
}
private lazy var disposeBag=disposeBag()
重写func viewDidLoad(){
super.viewDidLoad()
配置视图()
}
私有函数配置视图(){
navigationItem.title=“您的帐户”
}
}
扩展配置文件ViewController:ViewModelAttaching{
func bind(viewModel:ProfileViewModel)->ProfileViewModel{
返回视图模型
}
}
视图模型


导入RxSwift
进口RxCocoa
导入ReSwift
最终类ProfileViewModel:ViewModelType{
typealias Dependency=HasReduxStore和HasImagePicker
lazy-var-userID:String=\uuuuu-user\uuuuu.id
让数据=PublishSubject()
让endSession=PublishSubject()
私有let依赖:依赖
结构绑定{
让连接存储:驱动程序
让我们断开存储:驱动程序
让fetchProfileByUserId:驱动程序
}
private lazy var disposeBag=disposeBag()
init(依赖项:依赖项,绑定:绑定){
自依
bindings.connectStore
.asObservable()
.map{self}
.bind(onNext:dependency.store.subscribe)
.处置(由:处置人)
bindings.disconnectStore
.asObservable()
.map{self}
.bind(onNext:dependency.store.unsubscribe)
.处置(由:处置人)
bindings.fetchProfileByUserId
.asObservable()
.bind(onNext:dispatchFetchForProfileById)
.处置(由:处置人)
}
private func dispatchFetchForProfileById()函数{
dependency.store.dispatch(FetchProfileByUserId(有效负载:userID))
}
}
扩展配置文件视图模型:StoreSubscriber{
func newState(状态:AppState){
}
}
加载视图时,我希望调用
bindings.fetchProfileByUserId
。然而,一切都没有发生。我更新了绑定,使其在
viewwillbeen
上触发,一切正常


我不知道为什么
viewDidLoad
在这种情况下不起作用。

您可以将
.debug()
添加到
viewDidLoad
链中,以及一个print()到
viewDidLoad
方法来查看到底发生了什么,但从外观上看,您似乎是在
viewDidLoad
(在
配置视图中
可能?)已触发,因此您永远不会获得任何其他事件,这仅在视图控制器创建期间发生一次,并将解释为什么
viewdideappear
工作。

啊,我明白了,因此我的视图控制器位于
UITabBarController
中,我相信它在设置自身时会调用
viewDidLoad
,这发生在绑定之前正在配置。谢谢,这非常有帮助。