带有 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 时代项目

如何让 Xcode 5 和 iOS7 中的图标不变得有光泽?

如何消除 XCode 5 / iOS 7 中的图标眩光?

这是适用于 iOS 7 的 Xcode 5 中的错误吗?

Root.plist 中的项目不显示在设置中。 iOS9/Xcode7-beta5