在viewDidLoad之后,IBOutletCollection的UIButtons为空

时间:2013-04-06 10:08:41

标签: ios xcode ipad uibutton iboutletcollection

如标题中所述,我的IBOutletCollection of UIButtons在viewDidLoad之后是空的。 我以同样的方式创建了一个UILabel的IBOutletCollection,这个工作完美无缺。 知道如何解决这个问题,或者我犯了什么错误?

以下是代码:

@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *lbl_save;
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *lbl_cancel;
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *lbl_edit;

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *btn_changeData;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *btn_save;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *btn_cancel;

按钮放在xib中并正确链接到相应的插座。就像标签一样。 Outlets linked

我按下其中一个按钮的时间是第一次,我想访问代码中的按钮。

for (UIButton *btn in _btn_changeData) {
    btn.hidden = NO;
    btn.userInteractionEnabled = YES;
}
for (UIButton *btn in _btn_save) {
    btn.hidden = YES;
    btn.userInteractionEnabled = NO;
}
for (UIButton *btn in _btn_cancel) {
    btn.hidden = YES;
    btn.userInteractionEnabled = NO;
}
for (UILabel *lbl in _lbl_save) {
    lbl.hidden = YES;
}
for (UILabel *lbl in _lbl_cancel) {
    lbl.hidden = YES;
}
for (UILabel *lbl in _lbl_edit) {
    lbl.hidden = NO;
}

这也是我得到以下异常的地方,并意识到我的Button OUtletcollection是空的。

  

- [UIButton countByEnumeratingWithState:objects:count:]:无法识别的选择器发送到实例0xa8a8850   enter image description here

我既不会覆盖outletcollection,也不会更改按钮的属性。 它只是标签在集合中而不是按钮。我不明白为什么。

提前获取任何帮助。

微型飞行器

1 个答案:

答案 0 :(得分:1)

我想到的第一个想法是属性没有正确合成。 _btn_changeData真的是btn_changeData属性后面的ivar吗?

第二个想法是我在调试其他人的代码时看到的。当出口连接不正确时,例如,如果控制器引用自身,则可以创建两个控制器实例。显然,只有它们会连接出口。确保只创建了实例。

对于调试,自己实现setter可能是个好主意。

编辑: 重读后,问题实际上与您在问题中说的不同。错误消息-[UIButton countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xa8a8850

并不意味着_btn_changeData是一个空数组。这意味着有UIButton而不是数组。 说完这些之后,你应该检查一下你是否覆盖了_btn_changeData中的数据。