带有 iOS 7 的 Xcode 5 中的 NSInternalInconsistencyException:“故事板:容器视图中有意外的子视图。”
Posted
技术标签:
【中文标题】带有 iOS 7 的 Xcode 5 中的 NSInternalInconsistencyException:“故事板:容器视图中有意外的子视图。”【英文标题】:NSInternalInconsistencyException in Xcode 5 with iOS 7: 'Story Board: There are unexpected subviews in the container view.' 【发布时间】:2013-11-17 11:54:41 【问题描述】:我刚刚安装了带有 OS X Mavericks 的 Xcode 5.0.2。在 Xcode 4.5 上运行最初为 ios 5.1 构建的项目时,出现“NSInternalInconsistencyException”错误,如下所示:
*** Assertion failure in -[UIStoryboardEmbedSegue perform],
/SourceCache/UIKit_Sim/UIKit-2903.23/UIStoryboardEmbedSegue.m:19
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'There are unexpected subviews in the container view.
Perhaps the embed segue has already fired once or
a subview was added programmatically?'
我所做的是解决显示的与已弃用 API 相关的任何警告,但我仍然面临这个问题。
我的问题是:
如何确定是哪个情节提要场景导致了该问题? 另外,有没有推荐的方法来解决这个问题?注意:我注意到我在 xCode 5 中使用 iOS 7 作为基础 SDK,而它曾经是 xCode 4.5 上的 iOS 6,但两者的部署目标都设置为 6.0。将 Xcode 5 中的部署目标更改为其他 SDK 版本并不能解决问题。
注意 2: 我注意到在 iOS 6 的 iPhone 模拟器上的 Xcode 4.5 上运行并且 Base SDK 设置为 iOS 6.0 时不会发生此问题。
故事板屏幕截图 Table View Controller 有一个容器视图,其中包含一个“嵌入 segue”到视图控制器。
【问题讨论】:
打开应用或切换到新视图时是否抛出异常?故事板的屏幕截图(至少是最初的 VC)可能会有所帮助。 打开应用时抛出异常。我会尽快添加截图。感谢您的回复。 初始VC中是否有多个顶层视图。 @Wain 截图已添加。 我只是遇到了类似的问题。你让它工作了吗?也许问题是 segue 需要一个 UIViewController 而不是容器内的 TableView? 【参考方案1】:我想通了。
我的用户界面如何
我正在为 iPhone 和 iPad 创建一个通用应用程序,其中每个设备都有一个情节提要。 我有一个标签栏控制器连接到一个导航控制器,然后连接到一个 UITableViewController,它在静态单元格中显示一个表格(为了让顶部的行显示标题)。在这个 UITableViewController 中,我有一个容器视图(使用自定义类 MyApp_UITableViewCell 设置),它显示了许多动态行。
原因
问题是由于容器视图设置为具有自定义类为:MyApp_BIUiTableViewCell。通过删除故事板中对这个自定义类的引用,问题被删除了
我是如何解决的
将基础 SDK 和部署目标更改为 iOS 7。
在每个设备的故事板中:我在每个容器视图的身份检查器中删除了引用自定义单元格(设置为 MyApp_UITableViewCell)
我的建议
对于类似的问题,我可以说是检查自定义类集并尝试删除(一一)。另外,请尝试注释掉每个 viewDidload 和 viewDidappear 内容,看看是哪里导致了问题。
【讨论】:
【参考方案2】:如果其他人偶然发现了这个,这就是我的故事:
将我的 Swift2 功能分支合并到我的 Swift3 分支后,我收到了这个错误。
我的 Storyboard 中有一个 ContainerView。我为这个 ContainerView 添加了一个出口到我的 ViewController。之后我创建了一个覆盖并在以下方法中添加了一个断点:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
当断点被命中时,我通过在控制台中执行以下命令来检查 ContainerView 有多少个子视图。
po containerView.subViews
这告诉我,我的 ContainerView 已经有一个 UIVisualEffectBackdropView 类型的子视图(或具有类似名称)。
所以我再次检查了我的 ContainerView,并意识到分配给它的自定义类是 UIVisualEffectView 类型。这显然导致它自动添加背景视图,从而使其与最终引发错误的断言不兼容。 我所要做的不是从 UIVisualEffectView 继承,而是从普通的 UIView 继承。当然要达到视觉效果我得把它添加到ContainerView嵌入的ViewController中。
希望这有助于使某人免于头痛:)
【讨论】:
以上是关于带有 iOS 7 的 Xcode 5 中的 NSInternalInconsistencyException:“故事板:容器视图中有意外的子视图。”的主要内容,如果未能解决你的问题,请参考以下文章
带有情节提要的 presentViewController 显示黑色视图 iOS 7.1 xcode 5.1
无法使用 Xcode 7.2 归档带有 RestKit v0.10.3 的 iOS 5.0 时代项目