文档章节

UIViewControllerHierarchyInconsistencyException异常

big军
 big军
发布于 2013/01/10 22:55
字数 791
阅读 2252
收藏 4
IOS中的MVC

      MVC模式是一种经典的软件架构模式,基本上懂程序设计的人都了解或应用过MVC模式。多数面向对象的程序设计架构都得益于MVC模式来有效的划分程序中的对象的角色,组织对象之间的耦合关系(MVC的具体定义和描述可以参见 维基百科),Cocoa Touch提供了IOS的开发环境,包含了诸多基础类库和框架,其中UIKit框架提供并实现了MVC模式。在IOS中UIViewController表示控制器,UIView代表视图。每一个UIViewController对象中都拥有一个view属性用以管理一组UIView对象。做过IOS开发的人都知道,一个Application的记载过程都伴随着两个对象树结构的生成,一个是控制器树形结构,另一个是视图树形结构,在UIViewController的viewDidLoad方法中,我们可以创建多个子控制器,并将子控制器下的view对象添加至父控制器的view对象中,这样依次迭代最终会完成两个对象树的创建。如图
                                        

      其实,做过前端开发的人都看的出来,图中的controller的树结构和view的树结构,单独拿出一个来都和DOM的树结构类似,都是父与子,兄弟与兄弟之间的关系。

异常的出现

      前面简单的描述了一下controller树和view树,其实这里面是有一点规定的,即:controller的树节点必须与view的树节点在层次结构上保持一致。这里所谓的一致是指一个subController所管理的view必须是其父控制器superViewController所管理view的子view 。这个一致性的规定好像在IOS的开发文档中并没有着重说明,可能是本人自己还未看到。因之前在项目中不小心违背了这个规定,因此得到一下错误:

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', 
reason: 'child view controller:<ViewControllerC: 0x6a3b7c0> should have parent view controller:<ViewControllerB: 0x6a46990> but actual parent is:<ViewControllerA: 0x6a49f70>'

      错误的说明很简单。所以循着错误的提示,就在IOS文档中搜索了一下UIViewControllerHierarchyInconsistency异常,发现该异常就在UIViewController类文档的最下方。
其释义大致如下:
因控制器的层次与视图的层次不一致会引发该异常。 当视图控制器的视图添加到视图层中,系统会遍历视图层来找到其第一个拥有视图控制器的父视图。找到的该父视图的视图控制器也必须是刚添加的 视图的所对应视图控制器的父控制器。否则会抛出该异常。当视图控制器通过addChildViewController方法被添加进来后,也会进行之前的一致性监测。 不存在父试图控制器的视图控制器,也可以将其视图添加到视图层中。但通常极少数情况下才会用到这种方式。
      源文档直译过来有些拗口建议大家参考下 源文档释义

© 著作权归作者所有

共有 人打赏支持
big军
粉丝 35
博文 54
码字总数 90542
作品 0
浦东
程序员
全局异常处理器开发

一、异常的分类 1. 预期异常 通过捕获异常从而获取异常信息 2. 运行时异常RuntimeException 主要通过规范代码开发、测试通过手段减少运行时异常的发生 系统的dao、service、controller出现都...

小小蒜头
2017/12/11
0
0
JAVA 的异常那些事

异常的概念 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序编译或运行期间,干扰了正常的指令流程。 Java中的Throwable类是所有异常的...

cloud-coder
2016/06/04
95
0
Android NDK来发之旅24--C++--异常处理

C++ 异常处理 异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。 异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try...

香沙小熊
2017/11/27
0
0
异常的概念和Java异常体系结构

一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架, 是Java语言健壮性的一个重要体现。 Java把异常当作对象...

杭州_周陶忠
2013/09/10
0
0
JAVA基础教程之JAVA异常机制

今天我们主要来说一说JAVA异常机制方面的内容。自设JAVA学习群457036818,大家可以进行技术交流一下 一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要传授的是一...

潭州学院
2015/05/18
244
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 到底谁是小公猫……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Trivium的单曲《Throes Of Perdition》 《Throes Of Perdition》- Trivium 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁:...

小小编辑
59分钟前
137
3
基础选择器

注意:本教程参考自网上流传的李兴华老师的jquery开发框架视频,但是苦于没有相应的配套笔记,由我本人做了相应的整理. 本次学习的内容 学习jquery提供的各种选择器的使用,掌握了jquery选择...

江戸川
今天
1
0
Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
今天
2
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部