Xamarin Studio上iOS Designer中感叹号的含义

时间:2014-09-02 13:52:14

标签: ios xamarin xamarin-studio

我正在使用iOS Designer,我的故事板上有不同的视图(导航控制器......)。几乎每个视图底部右侧都有一个红色的感叹号。我得到像

这样的错误
  

System.NullReferenceException
  对象引用未设置为对象的实例

如果我转到相应的代码行:

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

这是我CustomNavigationController的一部分。如果我在iOS Designer上设置类名,我会收到错误。我在这里要添加什么?构造函数如下所示:

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中的预览不再显示正确的颜色。

如果我在GetSupportedInterfaceOrientations()中注释CustomNavigationController,则其他感叹号已被删除。我以为我需要这个函数来定义每个视图控制器的方向。快速浏览表明它似乎有效。

1 个答案:

答案 0 :(得分: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/