我有一个UINavigationController进入一个加载数据的ViewController。然后,此ViewController将转换为TabViewController。这个TabViewController有两个选项卡,每个Tab都转到另一个UITableViewController。那两个TableViewController然后segue到相同的DetailsViewController。
现在从DetailVC向后导航时出现此错误:
嵌套推送动画可能导致导航栏损坏 在意外状态下完成导航过渡。 导航栏子视图树可能已损坏 * 由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'无法将自己添加为子视图'。
同样,两个TableView都以相同的方式设置,但是底部的表格视图从框架的顶部开始,因此它的部分被导航栏遮挡。
答案 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;
}
这很有效。