2014-09-02 28 views
1

我正在使用iOS設計器,並且我有一個帶有不同視圖的故事板(導航控制器,...)。在幾乎每個視圖的底部右側都有一個紅色感嘆號。我得到這樣Xamarin Studio上iOS設計器中感嘆號的含義

System.NullReferenceException
對象引用錯誤不設置到對象的實例

如果我去相應的代碼行:

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() 
{ 
    return TopViewController.GetSupportedInterfaceOrientations(); 
} 

這是部分我的CustomNavigationController。如果我在iOS設計器上設置類名稱,則會出現錯誤。我需要在這裏添加什麼?構造函數如下所示:

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

我是否必須在AppDelegate中實例化它?

在另一個視圖控制器我得到一個類似的異常(有不同的堆棧),並指向我這一行:

this.NavigationController.NavigationBar.TintColor = UIColor.FromRGB (21, 66, 139); 

的應用程序似乎是工作在模擬器,雖然對設備的罰款。

如何解決此問題?

編輯:

我現在在我的視圖控制器刪除代碼:

this.NavigationController.NavigationBar.TintColor = UIColor.FromRGB (21, 66, 139); 

作爲替代我搬到這個代碼的應用程序委託FinishedLaunching()

UINavigationBar.Appearance.TintColor = UIColor.FromRGB (21, 66, 139); 

結果是,現在我沒有這個視圖控制器的感嘆號和顏色是所需的。但iOS Designer中的預覽不再顯示正確的顏色。

如果我在CustomNavigationController中註釋掉GetSupportedInterfaceOrientations(),則表示其他感嘆號已被刪除。我想我需要這個函數來定義每個視圖控制器的方向。快速查看錶明,它似乎工作。

回答

1

設計時間可以支持的限制。在設計模式下,您應該將任何動態數據(例如從服務加載的數據)替換爲虛擬數據。這同樣適用於僅在運行時可用的運行對象TopViewController

if (Site != null && Site.DesignMode) 
{ 
    // use dummy data for designer surface 
} 
else 
{ 
    // use live data 
} 

本文檔介紹了它的詳細信息:

http://developer.xamarin.com/guides/ios/user_interface/designer/ios_designable_controls_overview/

+0

感謝我不知道的信息。所以我應該在設計模式下添加一個默認方向?這是否也適用於訪問'this.NavigationController'?我不知道爲什麼我無法訪問導航控制器。在iOS設計器中,此視圖上缺少導航欄。 – testing 2014-09-03 14:36:09

+0

現在我試圖使用這種方法,但我仍然在iOS設計器中得到'System.NullReferenceException' ...這裏是代碼'if(Site!= null && Site.DesignMode){UI}返回UIInterfaceOrientationMask.Portrait; } else { return TopViewController.GetSupportedInterfaceOrientations(); }' – testing 2014-09-03 14:47:58

+0

我再次嘗試了一個字符串。我得到了'UIViewControllerHierarchyInconsistency'。這種方法不起作用。 – testing 2014-09-05 08:59:03