博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIViewControllerHierarchyInconsistencyException异常
阅读量:6227 次
发布时间:2019-06-21

本文共 1358 字,大约阅读时间需要 4 分钟。

  hot3.png

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

转载于:https://my.oschina.net/hmj/blog/101444

你可能感兴趣的文章
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
c/c++中保留两位有效数字
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
百度页面分享插件源代码
查看>>
《别做正常的傻瓜》的一些读书心得
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
spring配置多数据源问题
查看>>