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

Geo*_*rge 5 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];
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我点击一行时,它会转到新页面但是当我单击导航栏中的后退按钮时,前一页面不会加载,而是显示黑页.它在日志中显示的错误是:嵌套的推送动画可能导致导航栏损坏,在意外状态下完成导航转换.导航栏子视图树可能已损坏.

我搜索了所有相似的答案,但无法得到解决方案.帮助将不胜感激.

提前致谢

Rai*_*rze 4

您可能在 Storyboard 中有一个 Segue,当选择表行时会触发该 Segue。当您在选择一行时还手动按下控制器时,会发生您所描述的错误。您应该从故事板中删除 Segue。

编辑:更多细节:

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

故事板截图

如果您将“行”从“行”拖动到右侧的视图控制器,则您创建了一个转场。当您在左视图控制器的表视图中选择一行时,很可能会触发此segue。如果您使用标准项目,这样的segue可能已经存在,并且不是您自己创建的。

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

您可以通过单击场景之间的粗线或圆形图标并按删除来删除转场。


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

[self performSegueWithIdentifier:@"SegueId" sender:self];
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

5602 次

最近记录:

11 年,9 月 前