0

一連のUIViewサブクラスを作成しました。それぞれが別のものから継承されます。

すべてのサブクラスの祖父母には、次のコードがあります。

NSString * className = NSStringFromClass([self class]);
[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];

このコードの問題は、すべてのサブクラスが独自の NIB を持っているわけではないことです。一部は、親クラスの NIB を使用することに頼っています。

UIViewコードを実行する前に、NIB からロードされているかどうかを確認したい。

どうすればいいですか?

4

1 に答える 1

0

そのコードは期待どおりに動作しません。申し訳ありません: を使用NSStringFromClass([self class])して nib 名を取得するため、クラス名を持つ nib が存在しない場合はロードされず、オブジェクトは nil になります。NIB には継承のようなものはありません。クラス名が失敗した場合は、明示的な nib 名を使用してみてください。何かのようなもの:

id myView = [[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
if (!myView)
    myView = [[NSBundle mainBundle] loadNibNamed:@"defaultNIBname" owner:self options:nil];

または、すべてのオブジェクト階層クラスを取得して、NIB が 1 つ見つかるまですべてを試すこともできます。

于 2013-03-27T11:15:56.383 に答える