0

この質問はこれに関連しています。私には2つのコンストラクターがあります:

- (id)initWithBanner:(NSMutableArray *)banners {
  if ( self = [super initWithNibName:@"UIBanner" bundle:nil] ) {
     testString = [[NSString alloc] initWithString:@"Banner"];
     NSLog(@"Foo");
  }

  return self;
}

- (id)initWithPreview:(NSMutableArray *)previews {
  if ( self = [super initWithNibName:@"UIBanner" bundle:nil];
    testString = [[NSString alloc] initWithString:@"Preview"];
    NSLog(@"Foo");
  }

  return self;
}

- (void)viewDidLoad {
  NSLog(@"%@", testString);
}

別のオブジェクトには、*bannerPreviewと*bannerVideoというこのクラスの2つのインスタンスがあり、initWithPreviewとinitWithVideoで初期化されています。何が起こるか:プレビューコンストラクターでは、バナーにない間はnilであるため、IBOutletsにアクセスできません。ただし、bannerVideoのメソッドviewDidLoadは、コンストラクターが終了する前に呼び出されますが、bannerPreviewのviewDidLoadは呼び出されません。クラスに文字列テストを追加し、上記の2つのメソッドにNSLog(@ "Foo")を追加しました。出力は次のとおりです。

2011-03-15 12:29:13.929 iUDC[2600:207] Foo
2011-03-15 12:29:13.934 iUDC[2600:207] preview
2011-03-15 12:29:15.038 iUDC[2600:207] (null)
2011-03-15 12:29:15.038 iUDC[2600:207] Foo

この動作をどのように処理する必要がありますか?

4

2 に答える 2

0

メソッドにバグがありますinitWithPreview:。それはおそらく言うべきです:

[super initWithNibName:@"UIPreview" bundle:nil]
于 2011-03-15T13:38:18.163 に答える
0

で行うことは、で行うinitこととは独立している必要がありますviewDidLoad。に依存するものself.viewはすべて、で実行する必要がありますviewDidLoad

viewDidLoadが終了する前または後に呼び出されるかどうかはinit、ビューのロードにかかる時間と、の実行にかかる時間によって異なりますinit

于 2011-03-15T12:59:10.473 に答える