0

カスタムinitメソッドを使用してNSMutableDictionaryをFirstClassに渡しました。

セカンドクラス、

firstClass = [[FirstClass alloc] initWithFeedData:feedDictionary];

[self.navigationController pushViewController:firstClasss animated:YES];

ファーストクラス、

 - (FirstClass *) initWithFeedData:(NSMutableDictionary *) dataDictionary {
 {
     NSLog(@"%@", dataDictionary);

     [[NSBundle mainBundle] loadNibNamed:@"FirstClass" owner:self options:nil];

    //[self viewDidLoad]; Without call, ViewDidLoad method doesn't call.

 }

 - (void) viewDidLoad {

      [super viewDidLoad];

      NSLOG(@"Inside View DidLoad"); // This method never calls.
  }

私のviewDidLoadメソッドは呼び出されません。「[selfviewDidLoad]」を呼び出すと、viewDidLoadメソッドが正しく機能します。viewDidLoadメソッドが別のメソッドを呼び出さずに直接呼び出さないのはなぜですか?私を助けてください。

ありがとう。

4

3 に答える 3

2

をサブクラス化する場合UIViewController(これは、期待しているためだと思います)、XIBを使用している場合はviewDidLoad、指定されたイニシャライザーをオーバーライドする必要があります。この場合、XIBのロード後に呼び出されます。XIBを使用していない場合は、ビューを作成するメソッドを実装する必要があり、終了後に呼び出されます。initWithNibName:bundle:viewDidLoadloadViewviewDidLoadloadView

于 2011-02-01T11:57:00.867 に答える
1

@Stephenは正しいです。少なくとも、を返すようにinitステートメントを書き直す必要がありますself。ただし、View Controllerでプロパティを宣言し、その方法でオブジェクトを渡す方がはるかに簡単で堅牢です。

FirstClass *firstClass = [[FirstClass alloc] initWithNibNamed:nil];
firstClass.feedDictionary = feedDictionary;

[self.navigationController pushViewController:firstClasss animated:YES];
[firstClass release];

viewDidLoadこれでメソッドが呼び出され、そこfeedDictionaryに座って待っています。

于 2011-02-01T12:02:18.397 に答える
0

あなたのinit方法は正しくありません。次のようになります。

- (id) initWithFeedData:(NSMutableDictionary *) dataDictionary {
  if (self = [super init]) {
    // TODO: do initialisation stuff with dataDictionary
  }

  return self;
}

FirstClassこれは、がから派生していることを前提としていUIViewControllerます。

NIBファイルがクラスと同じ名前である限り、自動的にロードされる必要がありloadBundle:ます。呼び出しの必要はありません。プロパティについてのドキュメントの内容は次のとおりです。nibName

このプロパティの値がnilで、カスタムサブクラスのloadViewメソッドをオーバーライドしなかった場合、View Controllerは、名前(.nib拡張子なし)がViewControllerクラスの名前と一致するnibファイルを探します。

于 2011-02-01T11:48:59.247 に答える