调用 Bundle.main.loadNibNamed
加载一个 .xib 文件,该文件包含 (n) 个用多个 UIView
定义的 UI 变体实例化我的子类的 n 个实例。
然后我应用过滤器表达式以使用 .first(where: { $0.restorationIdentifier == <correct restoration ID>
选择正确的变体。
在这种情况下,我的过滤器表达式正确返回了 .xib 中的第 5 个 UIView
,但我的自定义类中的 @IBOutlet
连接到已实例化的第一个 UIView
立即被我认为是 ARC 弃用。
这导致我意外地获得了 nil IBOutlet
。如何将 IBOutlet
连接到由 Bundle.main.loadNibBaned
答案 0 :(得分:1)
问题在于 loadNibNamed
正在实例化您的所有视图,而您只是选择保留其中一些视图。在此过程中,IB 插座按某种顺序分配,这很可能不会以您想要的对象最后分配给插座而告终。
我不认为 nib 文件可以让您仅实例化多个顶级对象中的一部分。您需要将各种视图拆分为多个笔尖(并且只加载您需要的一个),或者切换到使用 Storyboard,它确实允许您通过标识符实例化特定对象。