使用MonoTouch的UIViewControllerHierarchyInconsistency异常

时间:2011-10-21 06:10:28

标签: exception xamarin.ios uitabbarcontroller ios5

我已使用MonoTouch 2.8和其他相关更新升级到iOS 5。我有一个UIViewController,里面有一个UITabBarController,为视图配置了两个不同的XIB。在UITabBarController上也有一个插座。我在ViewDidLoad中所做的是

this.View = this.TabBar.View;

现在升级到iOS 5后,我的标签栏中的视图会出现UIViewControllerHierarchyInconsistency异常。我能做到

this.View.AddSubview(this.TabBar.View); 

this.View.Add(this.TabBar.View);

并且异常停止发生。但问题是我的标签栏位于屏幕底部,只有部分图像可见,您无法看到相关文本。在搜索过程中,我发现了一些Objective-C示例,这些示例看起来都像是使用子视图路径,这没有用。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

iOS4中支持的模式是一个坏主意:通过抓取内部(视图控制器的View属性)并将其添加到另一个视图控制器的视图层次结构来连接视图控制器。这不仅是丑陋的,而且引发了关于视图层次结构的各种问题。

虽然Apple仍支持基本模式,但不再支持任何高级用户,您需要使用新的viewcontroller包含设置。现在将这些无效用途引发为例外。

在WWDC 2011演示文稿中,查找会话102 - “实现UIViewController遏制”。

对于您的主视图控制器来说,主要的变化是占用整个屏幕的那个,你改变旧的:

window.AddSubview (myViewController.View);

要:

window.RootViewController = myViewController

对于其他人,您使用新的API:

currentContainer.AddChildViewController (myOtherViewController);

在您的情况下,您正在向选项卡添加新的ViewController,因此您可以执行以下操作,将视图控制器添加到第一个选项卡:

myTabBar.ViewControllers [1].AddChildViewController (myFancyController)