1

「if」条件は最初のループで機能しますが、2 番目のループでは機能しません。2 番目のループで条件をチェックしたくない理由と、最初のループでのみ機能する理由がわかりません。

for (UIView *view in dro.subviews) {
    for (TOJDropableButtonView *v in view.subviews) {
        if ([v.type isEqualToString:targetView.filterItem.searchFilterItem.type]){
            NSLog(@"%@", targetView.filterItem.searchFilterItem.type);
        }
    }
}


-[UIImageView type]: unrecognized selector sent to instance 0x161bb960
2012-12-11 20:18:00.985 HungryNow[2507:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView type]: unrecognized selector sent to instance 0x161bb960'
*** First throw call stack:
(0x1790012 0x149de7e 0x181b4bd 0x177fbbc 0x177f94e 0x1f401 0x2fe45 0x2ec6c 0x14b1705 0x4f2f4c 0x4f2fbc 0x41833f 0x418552 0x3f63aa 0x3e7cf8 0x27f2df9 0x27f2ad0 0x1705bf5 0x1705962 0x1736bb6 0x1735f44 0x1735e1b 0x27f17e3 0x27f1668 0x3e565c 0x24ad 0x23d5)
libc++abi.dylib: terminate called throwing an exception
4

1 に答える 1

2

すべてのサブビューを TOJDropableButtonView にキャストしています。

しかし実際には、dro には TOJDropableButtonView クラスではないサブビューがいくつかあります。そして、dro のサブビューの 1 つはたまたま、equalToString 行でアクセスしようとしている「タイプ」プロパティを持たないイメージ ビューです。

すべてのサブビューを TOJDropableButtonView に型キャストするのではなく、目的のサブビューがクラス TOJDropableButtonView であることを確認してください。

以下のコードはあなたの問題を取り除くはずです。

for (UIView *view in dro.subviews) {
    for (UIView *v in view.subviews) {
        if([v isKindOfClass:[TOJDropableButtonView class]]){
            if ([v.type isEqualToString:targetView.filterItem.searchFilterItem.type]){
               NSLog(@"%@", targetView.filterItem.searchFilterItem.type);
            }
        }
    }
}
于 2012-12-11T19:31:42.037 に答える