ios – 从NIB加载视图,IBOutletCollection是零,即使其他IBOutlet
发布时间:2020-12-15 01:57:40 所属栏目:百科 来源:网络整理
导读:我在NIB文件中列出了一个视图,然后将我的UIView子类添加为文件所有者。 子类看起来像这样: @property (nonatomic,weak) IBOutlet UILabel *categoryLabel;@property (nonatomic,weak) IBOutletCollection(UIImageView) NSArray *images; 属性较弱,原因如
我在NIB文件中列出了一个视图,然后将我的UIView子类添加为文件所有者。
子类看起来像这样: @property (nonatomic,weak) IBOutlet UILabel *categoryLabel; @property (nonatomic,weak) IBOutletCollection(UIImageView) NSArray *images; 属性较弱,原因如下:http://stackoverflow.com/a/7729141/1016515 然后我将标签和笔记本上的UIImageViews从视图连接到文件所有者。 然后,在这个子类的awakeFromNib部分,我做到了: [[NSBundle mainBundle] loadNibNamed:@"CategoryButton" owner:self options:nil]; NSLog(@"label: %@",self.categoryLabel); NSLog(@"images: %@",self.images); 我期望看到类别标签和图像的地址。相反,我发现类别标签很好,图像为零。 这是令人困惑的,因为图像和categoryLabel的声明是相同的。为什么一个工作和另一个失败? 解决方法
我把它放在这里,因为我没有找到任何问题,但是如果你习惯于使用IBOutlets而不是IBOutletCollections,那么似乎是一个很容易的错误。
由于这是我通常为IBOutlets做的,因为在另一个问题中讨论的原因,我使财产变弱。 我忽略的是,IBOutletCollection是类的实例变量,而不仅仅是对视图层次结构的任意引用。因此,如果它是一个弱属性,NSArray *将立即被释放,因为视图层次结构不像其他IBOutlet属性一样保留它。 修复很简单,使得属性很强: @property (nonatomic,strong) IBOutletCollection(UIImageView) NSArray *images; 更新:根据this answer,几乎所有的IBOutlet应该是强大的,除非他们必须是弱的,以避免保留周期。这是新的,大多数文件仍然表明网点应该很弱。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |