0

调用Bundle.main.loadNibNamed加载一个 .xib 文件,该文件包含 (n) 个用多个 s 定义的 UI 的多个变体UIView实例化我的子类的 n 个实例。

然后我应用过滤器表达式来选择正确的变体.first(where: { $0.restorationIdentifier == <correct restoration ID>

在这种情况下,我的过滤器表达式正确地返回了UIView我的 .xib 内部的第 5 个,但@IBOutlet我的自定义类中的 s 连接到第一个UIView被实例化但立即被我假设为 ARC 的东西所弃用。

这导致我意外地出现 nil IBOutlet。可以做些什么来将IBOutlets 连接到正确的(在这种情况下是第 5 个) UIView 返回Bundle.main.loadNibBaned

4

1 回答 1

1

问题是loadNibNamed实例化了你所有的视图,而你只是选择保留其中的一些。在此过程中,IB 网点按某种顺序分配,这很可能不会最终将您想要的对象分配给最后一个网点。

我不认为 nib 文件为您提供了一种仅实例化其多个顶级对象中的一些对象的方法。您需要将各种视图拆分为多个 nib(并且只加载您需要的那个),或者切换到使用 Storyboard,它允许您通过其标识符实例化特定对象。

于 2021-04-02T21:53:15.690 回答