gpt4 book ai didi

iOS 以编程方式向下钻取导航堆栈

转载 作者:行者123 更新时间:2023-11-29 02:37:22 25 4
gpt4 key购买 nike

我发布了一个question今天早些时候,关于对收到推送通知的 react ,我需要从一个 View 深入到另一个 View 。这个问题已得到解答,但是我现在转向了对推送通知使用react的另一个要求,即我需要深入到导航堆栈中的第三级。

下面是我的 View 层次结构的模型,在收到推送通知后,我想深入到 View 标题“第三 View ”。

Screenshot of view hierarchy

从我上一个问题的答案中,我可以深入到“第二个 View ”,但是当我尝试执行转场以将“第三个 View ”插入堆栈时,我得到与根据我之前的问题:

Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'Admin'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

在我的 AppDelegate 中,当我收到通知时,我选择所需的选项卡:

UINavigationController *navController = (UINavigationController*)[_tabBarController selectedViewController];
NHProfileViewController *profileViewController = navController.viewControllers[0];
[profileViewController displayAdminWebViewForPushNotification];

然后在profileViewController(第一个 View )中显示AdminWebViewForPushNotification:

_displayAdminForPushNotification = YES;
[self performSegueWithIdentifier:@"Settings" sender:self];

其中“设置”是上图中的“第二个 View ”。

然后在 prepareForSegue 中:

if ([segue.identifier isEqualToString:@"Settings"])
{
NHSettingsTableViewController *settingsViewController = segue.destinationViewController;

if (_displayAdminForPushNotification)
{
[settingsViewController displayAdmin];
_displayAdminForPushNotification = NO;
}
}

到目前为止,一切都很好,但是一旦我点击 [settingsViewController displayAdmin]:

- (void)displayAdmin
{
[self performSegueWithIdentifier:@"Admin" sender:self];
}

它崩溃了。我已经做了一些调试,此时 settingsViewController 没有导航 Controller (因此出现崩溃/错误消息)。我不明白这一点,因为“第一 View ”嵌入在导航 Controller 中。

最佳答案

您提前执行了第三个转场——第二个转场甚至还没有完成,所以它没有导航 Controller 。

通过使用此方法延迟它在 segue 之后执行操作:
How to execute some code after a segue is done?

或者使用viewWillAppear!

关于iOS 以编程方式向下钻取导航堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com