通过UINavigationController错误向后导航

时间:2013-11-10 22:04:48

标签: ios iphone objective-c uitableview uinavigationcontroller

我有一个UINavigationController进入一个加载数据的ViewController。然后,此ViewController将转换为TabViewController。这个TabViewController有两个选项卡,每个Tab都转到另一个UITableViewController。那两个TableViewController然后segue到相同的DetailsViewController。
现在从DetailVC向后导航时出现此错误:

  

嵌套推送动画可能导致导航栏损坏   在意外状态下完成导航过渡。   导航栏子视图树可能已损坏    * 由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'无法将自己添加为子视图'。

同样,两个TableView都以相同的方式设置,但是底部的表格视图从框架的顶部开始,因此它的部分被导航栏遮挡。

1 个答案:

答案 0 :(得分:2)

我有一个表格视图和一个搜索栏控制器。我在表格视图单元格上创建了​​push segue,并通过搜索控制器以编程方式执行推送选择搜索项目。当导航回异常触发时。执行相同的segue时会发生此异常一次两次。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath*)indexPath
{
if (tableView == self.searchDisplayController.searchResultsTableView)
{

    [self performSegueWithIdentifier:@"showDetail"sender:self];
}
}

因为它在故事板中创建的表视图单元格选择执行两次相同的segue,而搜索结果单元格选择是另一个。 所以检查何时执行segue

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if (self.tableView == self.searchDisplayController.searchResultsTableView)
{

    [self performSegueWithIdentifier:@"showDetail"sender:self];
    return YES;
}

return NO;
}

这很有效。