iOS:嵌套推送动画可能导致导航栏损坏

时间:2014-05-19 10:39:25

标签: ios ios7

我是ios的新手。我正在开展一个项目,但坚持这个错误。

基本上下面的代码是在单击一行时加载一个新的xib,if语句用于检查是否点击了一个特定的行。

if (#something) {
    UIViewController *controller = [[NSClassFromString(@"abcd") alloc] initWithNibName:@"abcd" bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];
} else {
    methodsViewController.r = [sel objectForKey:@"cvb"];
    methodsViewController.m = [sel objectForKey:@"bnm"];
    #adding controller
    [self.navigationController pushViewController:controller animated:NO];
}
问题是,当我点击一行时,它会转到新页面但是当我单击导航栏中的后退按钮时,前一页面不会加载,而是显示黑页。它在日志中显示的错误是:     嵌套推送动画可能导致导航栏损坏,在意外状态下完成导航过渡。导航栏子视图树可能已损坏。

我搜索了所有相似的答案,但无法得到解决方案。非常感谢帮助。

提前致谢

2 个答案:

答案 0 :(得分:4)

您可能在故事板中有一个Segue,当选择一个表行时会触发该Segue。当您在选择行时手动推送控制器时,会出现您描述的错误。您应该从故事板中删除segue。

编辑:更多详情:

我假设你使用了一个故事板(设计窗口中有多个视图控制器)。如果你不使用它,我走错了路。例如,从我的一个项目中截取这个屏幕截图:

Storyboard screenshot

如果您已将控件 - 从“行”拖动到右侧的视图控制器,则会创建一个segue。当您在左视图控制器的tableview中选择一行时,可能会触发此segue。如果您使用的是标准项目,那么这样的segue可能已经存在,而您自己并没有创建它。

当您选择一行时,segue会自动“触发”。当您在代码中手动推送视图控制器时,可能会导致“第二次推送”,这会干扰导航控制器。

您可以通过单击场景之间的粗线或该圆形图标删除segue,然后按删除。


如果您需要一个在选择行时不会自动触发的segue,您可以控制 - 将其从该黄色图标拖动到目标场景。应出现一个菜单,您可以选择“手动”下的其中一个选项。然后必须手动触发segue,您将在代码中执行以下操作:

[self performSegueWithIdentifier:@"SegueId" sender:self];

单击故事板中的圆形segue图标时,可以在“标识符”字段中的属性检查器的实用程序窗口中设置标识符。该标识符是上面代码行中使用的字符串。

答案 1 :(得分:1)

我因忘记插入休息而被抓住了;在一个案例之后:在switch()语句中。 每个案例:有一个[self performSegueWithIdentifier:... 我正在进入下一个案例并执行其中两个Segue表演者。