私はこの簡単なプログラムを作ります:
-(void) vPrintAllSubviews
{
[self printAllSubviewsWithDepth:0];
while (false);
}
-(void) printAllSubviewsWithDepth:(NSUInteger) depth
{
UIView * theView= self;
[@"" stringByPaddingToLength:depth withString: @"abc" startingAtIndex:0];
NSString * result =[NSString stringWithFormat:@"%@%@",[@"" stringByPaddingToLength:depth withString: @" " startingAtIndex:0], theView];
PO(result);
NSArray * subViews = self.subviews;
for (UIView * subView in subViews) {
[subView printAllSubviewsWithDepth:depth +1];
}
}
それを呼び出すと、次のようになりました。
-[UITableView vPrintAllSubviews]: unrecognized selector sent to instance 0x1faa8c00
しかし、UITableView は UIView のサブクラスであり、そのカテゴリはすべての UIView で機能します。実際、このカテゴリは以前のはるかに複雑なプロジェクトでうまく機能していました。
では、なぜ UITableView は vPrintAllSubviews にアクセスできることを認識していないのでしょうか?
コンパイルエラーも含まれていません。
ビルド フェーズを見ると、3 つのファイルのみがコンパイルされていることを示すこの図が表示されました。うーん...私の最後のプロジェクトでは、リストをコンパイルするために.mファイルを追加する必要があったことを覚えていません。