ios – 从NIB加载视图,IBOutletCollection是零,即使其他IBOutlet的工作正常

ios – 从NIB加载视图,IBOutletCollection是零,即使其他IBOutlet的工作正常,第1张

概述我在NIB文件中列出了一个视图,然后将我的UIView子类添加为文件所有者。 子类看起来像这样: @property (nonatomic, weak) IBOutlet UILabel *categoryLabel;@property (nonatomic, weak) IBOutletCollection(UIImageView) NSArray *images; 属性较弱,原因如下:htt @H_404_6@ 我在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应该是强大的,除非他们必须是弱的,以避免保留周期。这是新的,大多数文件仍然表明网点应该很弱。

总结

以上是内存溢出为你收集整理的ios – 从NIB加载视图,IBOutletCollection是零,即使其他IBOutlet的工作正常全部内容,希望文章能够帮你解决ios – 从NIB加载视图,IBOutletCollection是零,即使其他IBOutlet的工作正常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1072073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存