【问题标题】:Uinavigation error while i press back button按下后退按钮时出现导航错误
【发布时间】:2016-11-04 15:18:47
【问题描述】:

第一个 vc(视图控制器)有一个按钮,当我按下它时,我必须转到嵌入标签栏控制器的第二个 vc。请检查附加图像。

在按钮单击事件中,我像这样调用标签栏:-

TabBarVC *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"TabBarVC"];
[self.navigationController pushViewController:vc animated:YES];

现在,当我按下它时,它会根据需要转到标签栏,但会显示消息:- “在意外状态下完成导航转换。导航栏子视图树可能已损坏。”

现在,当我单击后退按钮应用程序崩溃并显示此错误消息时:-

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法将自身添加为子视图”

可能的解决方案 :- 这可能是因为我调用了嵌入在 secondvc 上的 tabbar 控制器... 我这样设置动画是到否:-

[self.navigationController pushViewController:vc animated:NO];

所以现在应用程序没有崩溃,但是当我按下后退按钮时,它应该转到 firstvc,但它再次转到标签栏控制器(相同的视图控制器)。如果我在后退按钮中单击 2 次,它会根据需要转到 firstvc。任何建议我如何消除此导航堆栈问题。

【问题讨论】:

  • 什么是 TabBarVC 的超类?
  • 我在第二个视图控制器中嵌入了标签栏控制器。

标签: ios objective-c iphone uinavigationcontroller uitabbarcontroller


【解决方案1】:

也许你想要这个我想它会帮助你解决你的问题 注意:-用户名和密码是“praveen”。我已将示例项目附加到此链接。 http://www.filedropper.com/tabbarapplicationwithlogin

【讨论】:

  • 是的,您的示例正在按预期工作,但它在我的末尾不起作用:- 我添加了 segue 标识符(标识符 - 传递并显示例如 push)并在按钮上单击我添加:[self performSegueWithIdentifier: @“通过”发件人:无];现在我运行应用程序,当我单击后退按钮时,它显示相同的错误,即“由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'无法将自身添加为子视图'”你的示例工作正常。你完成了吗这个例子还有什么?请建议
  • 不要执行 segue 只是将其关闭,请通过我的编码。
  • 我没有使用 segue,而是将 tabbar contrller storyboard id 设置为 TabBarVC,我将其用于您的代码并解决了问题:- ViewController *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"TabBarVC"]; [self.navigationController pushViewController:vc动画:是];我有点困惑。在第一行代码中,我将标签栏控制器分配给 viewcontroller 类型并且它正在工作。
  • 在您的示例中,如果我按下登录按钮,它会显示标签栏并显示第一项,即“更多”假设我想在登录后打开不同的标签栏项目我该怎么做。我看到我们可以通过 setselectedindex 方法做到这一点,但你有任何例子或链接吗?
  • 不,我没有任何代码或链接,但会尽快为您提供答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2016-03-09
  • 2021-09-14
  • 2017-03-27
相关资源
最近更新 更多