将自定义视图控制器从XIB加载到主视图控制器会产生NSUnknownKeyException

时间:2017-03-03 18:20:05

标签: ios swift swift3 jtapplecalendar

更新:回答

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

原始问题:

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

        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连接到它的所有者(viewcontroller)。该密钥是作为导致错误的密钥。然而,当我检查UIView的参考网点时,他们的信誉良好。

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

更新:参考

enter image description here

xib xml的连接部分:

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

相关代码:

https://github.com/cooderatgit/CalendarApp

3 个答案:

答案 0 :(得分:2)

由于IBOutlet链接断开,您收到此错误。转到所选视图控制器的xib / storyboard中的outlet选项卡,然后使用&#39;!&#39;查找插座连接,删除并构建。

答案 1 :(得分:1)

试试这个:

Range("C1:O1").Offset(Lrow - 1).Merge

答案 2 :(得分:0)

解决此问题的方法如下:

  1. 创建一个选中了xib选项的UIViewController
  2. 转到xib文件并删除显示的根视图
  3. 将UIViewController从对象库添加到IB。现在 xib的根是一个UIViewController(不是XCode生成的默认视图)
  4. 转到新添加的视图控制器的身份检查器 将自定义类更改为视图控制器swift文件 创建(这是我之前出错的地方,我试图分配 一个ViewController作为由其创建的视图的自定义类 默认情况下为XCode)
  5. 然后在ViewController之间建立出口连接 来源和意见。
  6. 这解决了我的问题。回顾过去,这种方法很有意义。正如其他答案所指出的那样,事实上,参考连接存在问题。然而,这是由于完全不同的原因而发生的,例如,意外删除参考连接。 XCode无法通过自定义类设置在视图和视图控制器之间建立不相互关联的连接。希望这可以帮助任何试图将自定义视图控制器从xib加载到另一个视图控制器的人。