2015-04-19 65 views
2

我有一個導航控制器作爲我的初始視圖控制器。它的根視圖控制器是「StartingViewController」。該視圖控制器由故事板生成。Xamarin在Storyboard中實例化初始導航控制器

自動生成的構造函數是:

public StartingViewController (IntPtr handle) : base (handle) 
     { 
     } 

然而,當我使用這個構造函數,我得到錯誤「object reference not set to an object」當我嘗試訪問我的任何網點。例如。

public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      label.Text = "hi"; 
     } 

但是像這樣工作得很好:

public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      Console.WriteLine("hi"); 
     } 

我試圖用不同的構造函數:

public StartingViewController() : base ("StartingViewController", null) 
{ 
} 

對於這一點,我沒有得到一個以前的錯誤,但沒有任何代碼在ViewDidLoad()中運行,並且它會輸出警告"Ignoring invocation of an instance method on a NULL instance"

回答

1

自動生成的構造函數是正確的。

public StartingViewController (IntPtr handle) : base (handle) 
{ 

} 

你是正確的做你的UI邏輯裏面ViewDidLoad(),該object reference not set to an object錯誤是告訴你,你正試圖設置文本標籤組件,不存在,或者更確切地說,引用不存在的。

當您向故事板中的ViewControllers添加組件時,您需要創建對頭文件的引用。

要做到這一點按住控制,並拖動一個引用到視圖控制器的頭文件。

enter image description here

當您關閉的Xcode Xamarin將與您的更改同步,你就可以修改組件。

+0

沒有違法意圖,但這是不好的。我和大多數使用Xamarin的人都不使用XCode。他們使用Xamarin Studio或Visual Studio製作故事板。我們如何解決Xamarin或Visual Studio中的這個問題?當應用程序點擊ViewDidLoad時,通過storybaord創建的所有視圖始終爲空,除非我們完全停止使用故事板,否則這種方法幾乎沒有用處。 –