Ios7 使用情节提要从appdelegate访问视图控制器
我遵循了Ray Wendelich的教程 只需查看故事板图像。 Ray正在使用以下代码访问“PlayerViewController”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
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];