ios - 为什么 IBOutlet var 在模拟器上运行时有值(value),但在设备上运行时产生 nil?

标签 ios swift

所以我有一个奇怪的情况。我有一个 View Controller ,它就像一个标签栏 Controller (但我自己制作了系统)。我们称它为“选项卡式 View Controller ”。在其中,我实例化了 4 个其他 View Controller ,每个 View Controller 都有自己的 TableView 。我采用这些 View Controller 的 Root View ,并将其作为 subview 添加到我的选项卡式 View Controller 上。我当然也将 4 个 View Controller 保存到选项卡式 View Controller 中的一个 View Controller 数组中。

在模拟器上运行时,所有这 4 个 View Controller 都按预期正常工作。该表正确显示列表。底部的标签栏可以很好地在 View Controller 之间来回切换。一切看起来都很酷。

但是当我在我的设备上运行它时,每次我访问任何 subview Controller 的 TableView 导出时,我总是遇到错误。 “线程 1: fatal error :在展开可选值时意外发现 nil”。当我使用调试器检查值时, TableView 导出为零。即使我将 TableView 的引用设为可选, TableView 导出也从未改变,始终为零。所以我得到了一个空屏幕而不是 table 。但是底部的标签栏仍然可以正常工作。

编辑:我还应该提到,当我调试 View 层次结构时,我根本没有看到任何 TableView 的踪迹。感觉就像我只是在使用 let vc = MyViewController.init() 创建一个通用 View Controller 。但如果模拟器也是如此,我可能可以进一步缩小问题范围。问题是,在模拟器中,它工作正常,子 Root View 正确地填充了 subview 。

于是我又做了一个实验。我在 subview Controller 的 TableView 顶部添加了一个带有红色背景的简单方形 UIView。在模拟器中,红色方 block View 正确显示在表格 View 的中间和顶部。在设备上,也完全没有红色方 block View 的痕迹,也没有表格 View 的痕迹。

这是我用来实例化 View Controller 的代码:

let sb = UIStoryboard(name: "Main", bundle: nil);
let vc = sb.instantiateViewController(withIdentifier: "MyViewController") as! MyViewController;

为什么会这样?如何解决?

最佳答案

解决方案是创建新的 Storyboard,创建新的 View Controller ,将 subview 从旧 View Controller 复制并粘贴到新 View Controller 。然后创建新类,将类内容从旧文件复制并粘贴到新文件。不要忘记链接所有 IBOutlet。使用它, View Controller 工作正常。我怀疑这与我们多次遇到涉及 Storyboard的 git 冲突有关。可能我们没有正确解决冲突, Storyboard的一些重要部分被删除了。大概。只是一个猜测。

关于ios - 为什么 IBOutlet var 在模拟器上运行时有值(value),但在设备上运行时产生 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52981005/

相关文章:

ios - 围绕自身旋转相机

ios - NSImageView ClipsToBounds

ios - 仅在 swift 2 中左右拖动对象

ios - 如果我再次单击同一个按钮,我将尝试撤消筛选结果

ios - 为什么这个 dateFormatter 日志 (null)

ios - 当 tableview 内容大小增加时,scrollview 中的 tableview 然后 tableview 正下方的 textview 上升到 tableview

swift - SceneKit didApplyAnimationsAtTime 计算时间

ios - 使用用户 NSContacts 查找 friend 页面非常慢 + "This application is modifying the autolayout engine from a background thread"

swift - 我可以使用@_silgen_name 来公开不是 Swift 函数的 [Objective-]C 或 C++ 符号吗?

ios - 我如何解析这个 JSON Pokemon 字典? Sprite 宝可梦 API (swift 3)