【发布时间】:2017-01-08 15:37:22
【问题描述】:
我想从 XIB 文件中加载 UIView,我可以通过以下方式成功地做到这一点:
让 nib = UINib(nibName: "CardView", bundle: nil).instantiateWithOwner(nil, options: nil).first as!界面视图
CardView 是我的 XIB 文件的名称。现在,当我尝试将 IBOutlet 添加到 XIB 文件时:
我收到此错误:
'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: 这个类不符合 keyphraseLabel 的键值编码。
我检查了 XIB 文件中没有任何孤立的 IBOutlets。所以认为这是因为我没有将nib 转换为CardView 类我尝试了这个:
让 nib = UINib(nibName: "CardView", bundle: nil).instantiateWithOwner(nil, options: nil).first as!卡片视图
但我最终得到了这个错误:
无法将“UIView”(0x10c058df8) 类型的值转换为“LazyFlashCards.CardView”(0x10934bb00)。
所以我猜我错误地实例化了 XIB 文件,但我不知道“正确”的方法
【问题讨论】:
-
您需要将顶级视图的类更改为您的类,而不是文件的所有者
-
感谢修复!所以文件的所有者是稍后加载文件的类的“代理”类,所以我收到错误的原因是因为我的视图控制器没有名为phraseLabel的IBOutlet。它是否正确?如果是这样,那么如果文件所有者将被实例化 NIB 的类所取代,那么文件所有者的目的是什么?
-
"如果是这样,那么如果文件所有者将被实例化 NIB 的类所取代,那么文件所有者的目的是什么" 好吧,所以你不了解 nib 加载?可能会帮助您阅读我的书:apeth.com/iOSBook/ch07.html#_nib_loading_and_file_8217_s_owner
-
除了@dan 的观点:如果您在更改文件的所有者和顶级视图之前已经创建了出口,那么您需要在更改后重新创建它们。跨度>
标签: ios swift xcode uiview xib