2017-04-10 5 views
0

私はUIViewのすべての単一サブクラスを反復するカスタムクラスを持っています。私が得ないのは、UIContainerViewを免除するコードを追加できないということです。UIContainerView以外のすべてを反復する

コード(UIViewの+ Recursion.mで):それはUIContainerViewある場合

- (NSMutableArray*)allSubViews 
{ 
    NSMutableArray *arr= [[NSMutableArray alloc] init]; 
    [arr addObject:self]; 
    for (UIView *subview in self.subviews) 
    { 
     [arr addObjectsFromArray:(NSArray*)[subview allSubViews]]; 
    } 
    return arr; 
} 

だから私はのためのループに追加したい、その配列に追加しないでください。私が試した:

- (NSMutableArray*)allSubViews 
{ 
    NSMutableArray *arr= [[NSMutableArray alloc] init]; 
    [arr addObject:self]; 
    for (UIView *subview in self.subviews) 
    { 
     if (![subview isKindOfClass:[UIContainerView class]]) <-- error use of undeclared identifier 
     [arr addObjectsFromArray:(NSArray*)[subview allSubViews]]; 
    } 
    return arr; 
} 

完全なエラーメッセージ:

宣言されていない識別子の使用 'UIContainerView'

カテゴリクラスはUIContainerViewを認識していないように見えますか?

+0

「UIContainerView」とは何ですか?それは公的なクラスではありません。 – rmaddy

+0

Qに元のエラーメッセージを追加してください。どの識別子が宣言されていませんか? –

答えて

1

あなたのコードがコンパイルされない理由はプライベートクラスをチェックしたいと思うようです。これが本当に必要な場合は、NSClassFromStringを使用できます。

- (NSMutableArray *)allSubViews 
{ 
    Class cvclass = NSClassFromString(@"UIContainerView"); 
    NSMutableArray *arr= [[NSMutableArray alloc] init]; 
    [arr addObject:self]; 
    for (UIView *subview in self.subviews) 
    { 
     if (![subview isKindOfClass:cvclass]) { 
      [arr addObjectsFromArray:[subview allSubViews]]; 
     } 
    } 

    return arr; 
} 
+0

ありがとうございます。 AppleがなぜUIContainerViewを非公開にしているのだろうと思います。また、私は彼らがこれを使用して私のアプリを拒否するのだろうか? – GeneCode

+1

内部使用のみのため、プライベートです。そして、はい、あなたのアプリが拒否される可能性が(小さな?)チャンスがあります。確実に知るには1つの方法しかありません。 – rmaddy

+0

私は回避策を持っています - タグを使用するだけですが、タグは嫌いです。とにかく私はこれ(NSClassFromString)を使用し、Appleがそれを拒否しないことを願っています。スティーブ・ジョブズに祈りましょう。 – GeneCode

関連する問題