Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios7 使用情节提要从appdelegate访问视图控制器_Ios7_Uinavigationcontroller_Storyboard_Uitabbarcontroller_Appdelegate - Fatal编程技术网

Ios7 使用情节提要从appdelegate访问视图控制器

Ios7 使用情节提要从appdelegate访问视图控制器,ios7,uinavigationcontroller,storyboard,uitabbarcontroller,appdelegate,Ios7,Uinavigationcontroller,Storyboard,Uitabbarcontroller,Appdelegate,我遵循了Ray Wendelich的教程 只需查看故事板图像。 Ray正在使用以下代码访问“PlayerViewController” UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; UINavigationController *navigationController = [tabBarController viewControllers][0]; P

我遵循了Ray Wendelich的教程

只需查看故事板图像。 Ray正在使用以下代码访问“PlayerViewController”

 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = [tabBarController viewControllers][0];
PlayersViewController *playersViewController = [navigationController viewControllers][0];
当我试图访问playerDetailsViewController时,使用下面的代码我会崩溃。传达信息

评级[2630:60b]*由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*-[\uu NSArrayI objectAtIndex:]:索引1超出边界[0..0]” ***第一次抛出调用堆栈: (0x30b49e83 0x3EA66C7 0x30a7fff9 0x3ddd1 0x3333EAD 0x3333e4f3 0x33338b41 0x332d3a07 0x332d2cfd 0x33338321 0x357b876d 0x357b8357 0x30b14777 0x30b14713 0x30b12edf 0x30a7d471 0x30a7d253 0x333375c3 0x33332845 0x3e0fd 0x3B397) libc++abi.dylib:以NSException类型的未捕获异常终止

代码

UITabBarController *tabBarController =
(UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController =
[[tabBarController viewControllers] objectAtIndex:0];
PlayersViewController *playersViewController =
[[navigationController viewControllers] objectAtIndex:0];

UINavigationController *nav=[[navigationController viewControllers]objectAtIndex:1];
PlayerDetailsViewController *playerdetailsviewcontroller=[[nav viewControllers]objectAtIndex:0];
我也试过下面的代码

UITabBarController *tabBarController =
(UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController =
[[tabBarController viewControllers] objectAtIndex:0];
PlayersViewController *playersViewController =
[[navigationController viewControllers] objectAtIndex:0];
PlayerDetailsViewController *playerdetailsviewcontroller=[[navigationController viewControllers]objectAtIndex:1];
在那里我得到了一个消息崩溃

“NSRangeException”,原因:“***-[\uu NSArrayI objectAtIndex:]:索引1超出范围[0..0]”

故事板图像

基本上我想从appdelegate访问PlayerdetailsViewcontroller。 我想我遗漏了什么,有什么想法吗?

你的应用程序在这里崩溃(
objectAtIndex:1
):

这是因为
naviationController
只有一个子视图(
playerViewController
)。如果不通过Segue在
PlayerViewController
中实例化
PlayerDetailsViewController
的话,你就不能在情节提要上再往下走

编辑 您只能访问最初可见的
viewcontroller
(通过
UITabBarController


我也不明白你为什么要在
PlayersViewController
中添加另一个
UINavigationController
。如果使用Segue将
PlayerViewController
连接到
PlayerDetailViewController
,则
navigationController
将被重新使用(这是正确的方法)。

看起来您有一个从玩家到玩家详细信息的模式Segue。因此,您可以使用PlayerViewController的presentedViewController属性,类似于

PlayersViewController *playersViewController = [navigationController.viewControllers firstObject];
UINavigationController *secondNavigationController = playersViewController.presentedViewController;
PlayerDetailsViewController *playerDetailsViewController = [secondNavigationController.viewControllers firstObject];

你能贴一个故事板的屏幕吗?或者更多信息你对故事板做了什么。然后我会尝试回答你的问题我已经编辑了这个问题,如果你稍微放大一点,你可以看到ViewControllers的名称如果我做了你说的上述事情,有没有办法访问ViewControllers?是的,您可以通过
PlayersViewController
访问它,还可以将数据从
AppDelegate
传递到
PlayersViewController
PlayerDetailsViewController
ya我用Hannes告诉的方法解决了它,通过playerViewController而不是app delegate访问它。如果我使用Segue连接playerViewController和playerDetailsViewcontroller,有没有办法从app delegate访问playerDeatailsViewcontroller。?我想从应用程序代理访问。
PlayersViewController *playersViewController = [navigationController.viewControllers firstObject];
UINavigationController *secondNavigationController = playersViewController.presentedViewController;
PlayerDetailsViewController *playerDetailsViewController = [secondNavigationController.viewControllers firstObject];