2013-04-06 51 views
0

正如标题所述,UIButtons的IBOutletCollection在viewDidLoad后为空。 我以同样的方式创建了UILabels的IBOutletCollection,并且这个工作正常。 任何想法如何解决这个问题,或者我犯了一个错误?UButtons的IBOutletCollection在viewDidLoad后为空

这里是代码:

@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:对象:计数:]:无法识别的选择发送到实例0xa8a8850 enter image description here

我既不覆盖outletcollection,也不我改变按钮的属性。 它只是标签在集合和按钮没有。我不知道为什么。

Thx提前寻求帮助。

Mav

回答

1

我想到的第一个想法是,属性没有正确合成。 _btn_changeData是否真的在后面btn_changeData财产?

第二个想法是我在调试别人的代码时看到的。例如,当插座连接错误时,如果控制器引用自身,则可以创建两个控制器实例。显然只有其中的一些将有连接的网点。确保仅创建实例。

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

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

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

+0

由于我使用最新的sdk xcode 4.6,我根本没有任何Synthesize。编译器会自动为我执行此操作。 你的想法听起来都不错,但令我困惑的是,标签outletcollections工作正常,而按钮却没有。 正如你可以在下面的图片中看到的例外调试器可以访问ivar _btn_changeData,它不是零。因此它得到正确的初始化,但它没有充满按钮。 – Maverick1st 2013-04-06 10:58:00

+0

@ Maverick1st更新了答案。请注意,调试器与普通代码有点不同。当它说里面有'NSArray'时,'NSArray'可能是从伊娃尔声明中提取的,而不是来自实际的数据。 – Sulthan 2013-04-06 11:02:31

+0

thx。我会检查这个。 – Maverick1st 2013-04-06 11:04:48