加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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应该是强大的,除非他们必须是弱的,以避免保留周期。这是新的,大多数文件仍然表明网点应该很弱。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读