Ios 如何从选项卡栏控制器访问子视图控制器

Ios 如何从选项卡栏控制器访问子视图控制器,ios,swift,swift3,Ios,Swift,Swift3,这似乎是一个愚蠢的问题,但我不太明白: 我的故事板看起来像:tabbar控制器->导航控制器->表视图控制器1->表视图控制器2 此代码位于选项卡栏控制器中,我正在尝试访问表视图控制器2 按照我的理解,这让我得到了导航控制器 let tempNavVC = self.viewControllers?[0] as! UINavigationController 这应该会得到表视图控制器2,因为我认为它是tempNavVC的viewControllers数组的索引1 let secondVC =

这似乎是一个愚蠢的问题,但我不太明白:

我的故事板看起来像:
tabbar控制器
->
导航控制器
->
表视图控制器1
->
表视图控制器2

此代码位于
选项卡栏控制器中,我正在尝试访问
表视图控制器2

按照我的理解,这让我得到了
导航控制器

let tempNavVC = self.viewControllers?[0] as! UINavigationController 
这应该会得到
表视图控制器2
,因为我认为它是
tempNavVC
viewControllers
数组的索引1

let secondVC = tempNavVC.viewControllers[1] as! TableViewController2
然而,这显然不是因为我得到:

“NSRangeException”,原因:'***-[\uu\NSSingleObjectArrayI objectAtIndex::索引1超出边界[0..0]'


任何帮助都将不胜感激。

故事板描述了关系,但没有描述运行时的真实情况。推送视图控制器(如第二个表视图控制器)可以在推送发生时存在,但不一定存在

因此,
tempNavVC.viewControllers[1]
将在导航视图控制器有两个子项的情况下工作,即如果第二个表视图实际上现在正在界面中显示。但是如果只有第一个表视图控制器子项在那里,它就不会在那里(因为第二个还没有被实例化并推送到导航视图控制器上)


..

你有什么“错误”?(您的代码中并没有这些反勾号,是吗?显示您的真实代码!)哦,这只是在尝试编写此问题时出现的格式错误好的,现在也请粘贴错误消息。更新了错误消息。这是一个很大的帮助。因此,如果我想将数据向下传递给
表视图控制器2
以显示,我应该首先将其向下传递一步到
表视图控制器1
?这种情况下的常见做法是vc1将数据传递给vc2。这是有意义的,因为vc1通过其
prepareforsgue
-涉及到的选项卡栏控制器不是那么清晰;我不清楚为什么它有数据。我不是说那是错的,我只是说各种设计都是可能的。
让table:UIViewController=navC.rootViewController
let navC = tabbarController.viewcontrollers[0] as! UINavigationController
let tableC: UIViewController = navC.rootViewController