热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS开发-解决导航栏子视图损坏问题

本文介绍了一个在Xcode5.0.2和iOS7模拟器环境下,使用Storyboard创建CoreDataCRUD应用时遇到的导航栏子视图损坏问题及其解决方案。

环境:Xcode 5.0.2  iOS 7模拟器

应用:使用Storyboard创建一个简单的CoreData CRUD应用,包含一个UITableViewController列表和一个UIViewController用于编辑或添加数据。

界面如下图所示,列表显示查询结果和删除功能,选择单元格后跳转到详细页面进行编辑或添加数据。

在TableViewController中,点击+号按钮会Push跳转到DetailViewController;选择单元格也会Push跳转到DetailViewController(identifier为:detailViewByCell)。这些跳转都是通过Storyboard中的连线实现的。

在页面跳转过程中出现了“Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted”的错误,导致导航子视图可能损坏。

为了排查问题,在DetailViewController中输出导航控制器的子视图:

    NSLog(@"%@", self.navigationController.viewControllers);

发现DetailViewController出现了两次,显然跳转过程中存在问题。

问题的原因是:在选择UITableViewCell时,通过连线直接PUSH到了DetailViewController,同时在代码中也实现了相同的跳转:

    [self performSegueWithIdentifier:@"detailViewByCell" sender:p];

解决方法是移除代码中的跳转逻辑,需要传递参数可以在prepareForSegue方法中处理:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"detailViewByCell"]) {
TRDetailViewController *detailVC = [segue destinationViewController];
Person *p = self.persons[[self.tableView indexPathForSelectedRow].row];
detailVC.editPerson = p;
}
}

推荐阅读
author-avatar
蘑菇宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有