Objective c 正在获取过渡视图控制器和应用程序崩溃的警告

Objective c 正在获取过渡视图控制器和应用程序崩溃的警告,objective-c,ios7,uinavigationcontroller,terminate,Objective C,Ios7,Uinavigationcontroller,Terminate,当我试图从ListViewController打开详细视图(使用DidSelectRowatinex)时,会收到如下警告 在意外状态下完成导航转换。导航栏子视图树可能已损坏。应用程序崩溃后出现错误-由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“无法将自身添加为子视图” 谢谢你的帮助 我的应用程序层次结构是 UIWindow 超宽带控制器 -(void)tableView:(UITableView *)tableView didSelectRow

当我试图从ListViewController打开详细视图(使用DidSelectRowatinex)时,会收到如下警告 在意外状态下完成导航转换。导航栏子视图树可能已损坏。应用程序崩溃后出现错误-由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“无法将自身添加为子视图” 谢谢你的帮助

我的应用程序层次结构是

  • UIWindow

    • 超宽带控制器

      -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
      {
          [tableView deselectRowAtIndexPath:indexPath animated:YES];
      XXXInfo *dInfo=[_SDArray objectAtIndex:indexPath.row];
      DetailViewController *detail1=[DetailViewController viewControllerWithInfo:dInfo];
      [self.navigationController pushViewController:detail1 animated:YES];
      }
      
      • 导航控制器

        -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
        {
            [tableView deselectRowAtIndexPath:indexPath animated:YES];
        XXXInfo *dInfo=[_SDArray objectAtIndex:indexPath.row];
        DetailViewController *detail1=[DetailViewController viewControllerWithInfo:dInfo];
        [self.navigationController pushViewController:detail1 animated:YES];
        }
        
        • UIViewController
有人能告诉我为什么我会担心吗?(对不起我的英语)

更新

这是我的DetailController代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
XXXInfo *dInfo=[_SDArray objectAtIndex:indexPath.row];
DetailViewController *detail1=[DetailViewController viewControllerWithInfo:dInfo];
[self.navigationController pushViewController:detail1 animated:YES];
}
//导航到详细信息的静态方法

 +(DetailViewController *)viewControllerWithInfo:(XXXInfo *)info
 {
   DetailViewController *detail=[[DetailViewController  alloc]initWithNibName:@"DetailViewController" bundle:nil];
   detail.detailInfo=info;
   NSLog(@"info%@ ",info);
   return detail;
}

动画要取消选择所选行,需要短时间来设置动画,然后会导致冲突,有两种方法可以解决此问题:

  • 设置动画:否 [表视图取消行索引路径:索引路径:否]

  • 移动代码行以将详细视图推入一个小方法,然后在大约1->1.5秒后使用PerformSelect执行该方法


  • 在DIDSELECTROWATINDEX中添加代码我已更新我的问题@trick14请看这个你在用NavigationController导航栏做什么吗?@技巧你不应该要求OP显示(类、控制器名称)所有内容,这是不必要的。它是可见的,任何人都可以轻松理解。嗨,代码看起来不错,但是,如果您想在选定行时将视图推入导航堆栈,则应在取消行索引路径处设置“动画:否”,或者不应使用该行代码,因为动画需要持续时间才能运行,这可能会导致冲突。