2013-10-04 76 views
2

我在iPad項目中使用MvvmCross 3.0.12。目前,我在MvxViewControllerExtensionMethods.LoadViewModel中獲得NPE,因爲touchView.Request爲null。這隻發生在繼承自MvxTableViewController的視圖控制器中;視圖控制器繼承自MvxViewController加載並顯示得很好。我設置了MvxTouchViewsContainer.CreateView中的斷點 - > MyTableViewController.Ctor - > MvxBaseTouchViewPresenter.Show - > MyTableViewController.LoadView;它們都引用了該類的同一個實例。然後當我在ViewDidLoad中找到一個斷點時,它的一個新實例和包括Request在內的所有屬性都爲null。MvxViewModelRequest在ViewDidLoad中爲null

這是Xamarin.iOS的錯誤還是我做錯了什麼?

回答

1

這有時會發生視圖控制器,如表,標籤欄和集合。

這是由Objective C基類init中引用View引起的,因此在C#構造完全完成之前觸發ViewDidLoad。這有點像'純'c#中可能發生的情況,如果基類構造函數引用虛擬方法。

要檢查這是否發生在您的應用程序中,請在您的應用程序中放置2個斷點 - 一個位於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; 

     // ... 

如果有幫助: