我是iOS新手。我在一个项目上工作,但卡在此错误。
基本上,以下代码是在单击某行时(如果使用语句检查是否单击了特定行)加载新的xib。
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];
}
问题是,当我单击一行时,它会转到新页面,但是当我单击导航栏中的“后退”按钮时,上一页不会加载,而是显示黑页。它在日志中显示的错误是:嵌套的推式动画可能会导致导航栏损坏。在意外状态下完成导航过渡。导航栏子视图树可能已损坏。
我搜索了所有类似的答案,但无法找到解决方案。帮助将不胜感激。
提前致谢
您可能在情节提要中有一个Segue,它会在选中表行时触发。当您还选择了一行时还手动推动控制器时,将发生您所描述的错误。您应该从情节提要中删除segue。
编辑:更多详细信息:
我假设您使用一个情节提要板(设计窗口中有多个视图控制器)。如果您不使用它,那我走错了路。例如,从我的一个项目中截取此屏幕截图:
如果将控件从“行”拖动到右侧的视图控制器,则创建了一个segue。当您在左视图控制器的tableview中选择一行时,可能会触发此segue。如果您使用标准项目,则可能已经存在这样的序列并且您自己没有创建它。
选择行时,segue会“自动”触发。当您在代码中手动推送视图控制器时,可能会导致“第二次推送”,从而干扰导航控制器。
您可以通过单击场景之间的粗线或该圆形图标并单击删除来删除序列。
如果您需要一个不会在选定行时自动触发的序列,可以将其从该黄色图标拖动到目标场景。应该会出现一个菜单,您可以在“手动”下选择一个选项。然后必须手动触发segue,您可以在代码中执行以下操作:
[self performSegueWithIdentifier:@"SegueId" sender:self];
单击情节提要中的圆形Segue图标时,可以在“标识符”字段中的属性检查器的实用程序窗口中设置标识符。该标识符是上面代码行中使用的字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句