0

タイトルで述べたように、UIButtons の IBOutletCollection は、viewDidLoad の後は空です。同じ方法で UILabels の 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 に配置され、対応するアウトレットに正しくリンクされます。ラベルのように。 リンクされたアウトレット

ボタンの 1 つを押すのは初めてで、コード内のボタンにアクセスしたい。

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 countByEnumratingWithState:objects:count:]: 認識されないセレクターがインスタンス 0xa8a8850 に送信されました ここに画像の説明を入力

アウトレットコレクションを上書きしたり、ボタンの属性を変更したりしません。ラベルがコレクションにあり、ボタンがないというだけです。そして、私には理由がわかりません。

助けが必要な場合は、事前に Thx.

マヴ

4

1 に答える 1

1

私の頭に浮かぶ最初のアイデアは、プロパティが正しく合成されていないということです。本当に財産_btn_changeDataの背後にある ivarですか?btn_changeData

2 番目のアイデアは、他の人のコードをデバッグしているときに見たものです。アウトレットが正しく接続されていない場合、たとえばコントローラーがそれ自体を参照している場合、2 つのコントローラー インスタンスが作成される可能性があります。明らかに、コンセントが接続されているのはそのうちの 1 つだけです。インスタンスのみが作成されていることを確認してください。

デバッグの場合は、セッターを自分で実装することをお勧めします。

編集:読み直した後、問題は実際にはあなたの質問とは異なります。エラーメッセージ-[UIButton countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xa8a8850

_btn_changeDataそれが空の配列であることを意味しません。これはUIButton、配列の代わりに a があることを意味します。_btn_changeDataそうは言っても、どこかでデータを上書きしていないかどうかを確認する必要があります。

于 2013-04-06T10:54:25.760 に答える