设置我拥有的场景:
我附上了一个非常简单的sample project showing the issue。
在iPad 5.1 Sim中运行它,观察每个标签。一个显示共享详细信息视图,一个失败。
NSLog调试报告第二个拆分视图具有NULL详细信息视图控制器:
2012-04-28 07:21:55.451 svcTest[14597:f803] tabBarController viewControllers = ( "UISplitViewController: 0x6a36100", "UISplitViewController: 0x6a39ab0" ) 2012-04-28 07:21:55.455 svcTest[14597:f803] svcA.viewControllers = ( "UINavigationController: 0x6a36250", "UIViewController: 0x6a38720" ) 2012-04-28 07:21:55.457 svcTest[14597:f803] svcB.viewControllers = ( "UINavigationController: 0x6a39cc0" )
单击第二个选项卡时出现此错误:
2012-04-28 07:22:58.457 svcTest[14597:f803] Splitview controller is expected to have a detail children before its used! 2012-04-28 07:22:58.459 svcTest[14597:f803] Split view controller should have its children set before layout!
查看故事板我已经设置了详细视图,所以这让我很困惑。
非常感谢您在每个标签上显示此“共享”视图的任何帮助。
谢谢!
答案 0 :(得分:1)
我为splitViewController指定了两个以上的viewControllers时收到了同样的警告,如下所示:
self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController, subViewController];
当我从数组中删除'subViewController'时,警告消失了。
在阅读关于添加/删除子视图的Apple文档后,它会提到以下内容:
此属性中的数组必须包含两个视图控制器。当视图控制器处于横向方向时,它们在拆分视图界面中从左向右呈现。因此,索引0处的视图控制器显示在左侧,索引1处的视图控制器显示在界面的右侧。
您可以查看UISplitViewController Class Reference的链接以获取更多信息。
答案 1 :(得分:1)
问题在于放置位于App Delegate的-applicationdidFinishLaunchingWithOptions:
这里,分割视图控制器委托在viewControllers之前设置。这似乎是问题的根源,如果您反转如下所示的两行,警告消息将消失:
请改用此代码:
self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.viewControllers = [NSArray
arrayWithObjects:masterNavigationController,
detailNavigationController, nil];
self.splitViewController.delegate = detailViewController;
有关详细说明,您可以查看:Splitview Controller Is Expected to Have a Master View Controller