-1

更新:回答

我在下面发布了我的答案,它为我解决了这个问题。问题的原因与建议的帖子完全不同。

原始问题:

我正在尝试从定义为 ViewController 的 xib 文件加载 UIView。

        if let overlayView = (Bundle.main.loadNibNamed("CalendarViewController", owner: self, options: nil)?.first as? JTAppleCalendarView) {
        self.navigationController?.view.addSubview(overlayView)
    }

但是,每次我运行该项目时,都会遇到一个未知的密钥异常。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MyApp.ViewController 0x7feac8607cc0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key calendarView.'

我在 xib 文件中有一个视图,我通过 IBOutlet 连接到它的所有者(视图控制器)。此键被指定为导致错误的键。但是,当我检查 UIView 的引用网点时,它们的信誉良好。

我尝试删除引用并重新添加它,并尝试通过将所有者指定给 xib 的视图控制器来加载 xib。仍然没有运气。

更新:参考

在此处输入图像描述

还有xib的xml的连接部分:

            <connections>
            <outlet property="calendarView" destination="dqi-m5-FXD" id="mAV-5Y-SXl"/>
        </connections>

相关代码:

https://github.com/cooderatgit/CalendarApp

4

3 回答 3

2

由于 IBOutlet 链接损坏,您会收到此错误。转到所选视图控制器的 xib/storyboard 中的插座选项卡,并查找带有“!”的插座连接,将其删除并构建。

于 2017-03-03T18:25:51.257 回答
1

尝试这个:

let overlayView = (Bundle.main.loadNibNamed("CalendarViewController", owner: self, options: nil)?.first as? CalendarViewController
    self.navigationController?.view.addSubview(overlayView)
于 2017-03-04T01:22:38.710 回答
0

解决此问题的方法如下:

  1. 创建一个选中 xib 选项的 UIViewController
  2. 转到 xib 文件并删除显示的根视图
  3. 将对象库中的 UIViewController 添加到 IB。现在,xib 的根是 UIViewController(不是 XCode 生成的默认视图)
  4. 转到新添加的视图控制器的身份检查器并将自定义类更改为创建的视图控制器 swift 文件(这是我之前出错的地方,我试图将 ViewController 分配为视图的自定义类默认由 XCode 创建)
  5. 然后在 ViewController 源和视图之间建立出口连接。

这为我解决了这个问题。回想起来,这种方法是有道理的。正如其他答案所指出的,事实上,参考连接存在问题。但是,发生这种情况的原因与例如意外删除参考连接完全不同。XCode 无法通过自定义类设置在彼此不关联的视图和视图控制器之间建立连接。希望这将有助于任何试图将自定义视图控制器从 xib 加载到另一个视图控制器的人。

于 2017-03-07T20:31:03.497 回答