Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ViewDidLoad中的MvxViewModelRequest为空_Ios_Xamarin.ios_Xamarin_Mvvmcross - Fatal编程技术网

Ios ViewDidLoad中的MvxViewModelRequest为空

Ios ViewDidLoad中的MvxViewModelRequest为空,ios,xamarin.ios,xamarin,mvvmcross,Ios,Xamarin.ios,Xamarin,Mvvmcross,我正在iPad项目中使用MvvmCross 3.0.12。目前,我在MVXViewController ExtensionMethods.LoadViewModel中得到一个NPE,因为touchView.Request为null。这只发生在从MvxTableViewController继承的视图控制器中;从MvxViewController继承的视图控制器可以正常加载和显示 我已经在MvxTouchViewsContainer.CreateView->MyTableViewController

我正在iPad项目中使用MvvmCross 3.0.12。目前,我在MVXViewController ExtensionMethods.LoadViewModel中得到一个NPE,因为touchView.Request为null。这只发生在从MvxTableViewController继承的视图控制器中;从MvxViewController继承的视图控制器可以正常加载和显示

我已经在MvxTouchViewsContainer.CreateView->MyTableViewController.Ctor->MvxBaseTouchViewPresenter.Show->MyTableViewController.LoadView中设置了断点;它们都引用了类的同一实例。然后,当我在ViewDidLoad中遇到断点时,它是一个新实例,包括请求在内的所有属性都为null


这是Xamarin.iOS的一个bug还是我做错了什么?

对于视图控制器,如表、选项卡栏和集合,有时会发生这种情况

我认为,这是由Objective C基类
init
中引用
视图
——从而在C#构造完全完成之前触发
ViewDidLoad
引起的。这有点像“纯”c#中可能发生的情况,如果基类构造函数引用虚拟方法

要检查应用程序是否发生这种情况,请在应用程序中放置两个断点—一个在ViewController构造函数中,一个在ViewDidLoad中—如果首先触发ViewDidLoad,则您知道情况就是这样

我发现的唯一解决方法是通过在构造函数中触发第二个ViewDidLoad调用来编写代码

    public FirstView()
    {
        // need this additional call to ViewDidLoad because UIkit creates the view before the C# hierarchy has been constructed
        ViewDidLoad();
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        if (ViewModel == null)
            return;

        // ...

如果有帮助:

  • 我相信我已经在至少一个N+1-也许N=25-中讨论过这一点,参见和
  • 在纯目标C代码中也会发生同样的事情-例如参见