ViewDidLoad期间ViewModel为null
我开始在iOS中使用MvvmCross。
public class MainView : MvxTabBarViewController { public override void ViewDidLoad() { base.ViewDidLoad(); var vm = (MainViewModel)this.ViewModel; if (vm == null) return; } }
将断点设置为访问ViewModel
的行,向我显示ViewModel
为null。
我可以通过在构造函数中调用ViewDidLoad()
来解决此问题。 然后, ViewModel
在构造函数调用期间为null,但在默认的ViewDidLoad
调用中有效。 但这看起来像是一种解决方法。 有人可以帮忙吗?
我猜这里的问题将特定于TabBarViewController
的构造方式。
ViewDidLoad
是一种虚方法,它是第一次访问View时调用的。
在TabBarViewController
的情况下,这发生在iOS基本View构造函数中 – 即它发生在类本身已经调用其构造函数之前。
我发现的唯一方法是在ViewDidLoad
添加一个针对情境的ViewDidLoad
,并在类构造函数中再次调用ViewDidLoad
。
您可以在行动中看到这一点N-25 – https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/976ede3aafd3a7c6e06717ee48a9a45f08eedcd0/N-25-Tabbed/Tabbed.Touch/Views/FirstView.cs#L17
就像是:
public class MainView : MvxTabBarViewController { private bool _constructed; public MainView() { _constructed = true; // need this additional call to ViewDidLoad because UIkit creates the view before the C# hierarchy has been constructed ViewDidLoad(); } public override void ViewDidLoad() { if (!_constructed) return; base.ViewDidLoad(); var vm = (MainViewModel)this.ViewModel; if (vm == null) return; } }