0

私はXamarinのiOS開発を初めて利用しており、わからない問題があります。次のコード行が実行されると、null参照例外がスローされ、その理由がわかりません。Xamarin iOS PushViewController null参照例外

this.NavigationController.PushViewController(location, true); 

ここは私のコードブロックです。

partial void BtnLogin_TouchUpInside(UIButton sender) 
    { 
     if (txtPassword.Text != "" && txtUsername.Text != "") 
     { 
      //send UN & PD to webservice for validation. 
      xxx.xxx.xxx.Services s = new xxx.xxx.xxx.Services(); 
      bool result = s.validateLogin(txtUsername.Text, txtPassword.Text); 
      if (result) 
      { 
       try 
       { 
        LocationViewController location = this.Storyboard.InstantiateViewController("LocationViewController") as LocationViewController; 

        if (location != null) 
         this.NavigationController.PushViewController(location, true); 
       } 
       catch (Exception ex) 
       { 
        LoginFail("Error", ex.Message); 
       } 
      } 
      else 
      { 
       LoginFail("Login", "Invalid username or password."); 
      } 
     } 
     else 
     { 
      LoginFail("Login", "You must enter both your username and password."); 
     } 
    } 

And my Storyboard

+0

にこのコードthis.NavigationController.PushViewController(location, true);

は、NavigationControllerプロパティはnull – Jason

答えて

2

のでログインのViewControllerがNavigationControllerではありません、あなたはthis.NavigationControllerを使用する場合、それがnull参照の例外がスローされます。

ここでは、2つの方法がこの問題を解決するには、次の

NavigationControllerにViewVontrollerのログイン入れ
  • を、NavigationController(ログインページのrootviewControllerとは)ストーリーボードの初期コントローラになるよう。

  • 変更ページがUINavigationController内に含まれていない場合this.PresentViewController(location, true, null);

+0

おかげでコールされます。それは完璧に働いた。 –

0

画面はUINavigationControllerに含める必要があります。

ストーリーボードを使用している場合は、画面の前にUINavigationControllerを置き、ナビゲーションコントローラーのセグを画面にドラッグしてください。セグはルートとして設定されます。

あなたのコードを使用している場合:

new UINavigationController(new [your screen class]);