我是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];
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我点击一行时,它会转到新页面但是当我单击导航栏中的后退按钮时,前一页面不会加载,而是显示黑页.它在日志中显示的错误是:嵌套的推送动画可能导致导航栏损坏,在意外状态下完成导航转换.导航栏子视图树可能已损坏.
我搜索了所有相似的答案,但无法得到解决方案.帮助将不胜感激.
提前致谢
您可能在 Storyboard 中有一个 Segue,当选择表行时会触发该 Segue。当您在选择一行时还手动按下控制器时,会发生您所描述的错误。您应该从故事板中删除 Segue。
编辑:更多细节:
我假设您使用故事板(设计窗口中不止一个视图控制器)。如果你不使用它,我就走错了路。例如,从我的一个项目中获取此屏幕截图:

如果您将“行”从“行”拖动到右侧的视图控制器,则您创建了一个转场。当您在左视图控制器的表视图中选择一行时,很可能会触发此segue。如果您使用标准项目,这样的segue可能已经存在,并且不是您自己创建的。
当您选择一行时,segue 会“自动”触发。当您在代码中手动推送视图控制器时,可能会导致“第二次推送”,从而干扰导航控制器。
您可以通过单击场景之间的粗线或圆形图标并按删除来删除转场。
如果您需要一个在选择行时不会自动触发的 Segue,您可以按住 Control 键并将其从黄色图标拖动到目标场景。应该会出现一个菜单,您可以选择“手动”下的选项之一。然后必须手动触发 segue,您可以在代码中执行以下操作:
[self performSegueWithIdentifier:@"SegueId" sender:self];
Run Code Online (Sandbox Code Playgroud)
当您单击故事板中的圆形转场图标时,您可以在属性检查器的实用程序窗口中的“标识符”字段中设置标识符。该标识符是上面代码行中使用的字符串。
| 归档时间: |
|
| 查看次数: |
5602 次 |
| 最近记录: |