2011-02-01 8 views
0

カスタムinitメソッドを使用してNSMutableDictionaryをFirstClassに渡しました。私は、 "[自己のviewDidLoad]" のみ、viewDidLoadメソッドが正常に動作を呼び出す場合iPhoneでViewDidLoadメソッドが呼び出されませんか?

第二のクラス、

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

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

FirstClassの、私のviewDidLoadメソッドで

- (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メソッドが別のメソッドで呼び出しを行わずに直接呼び出さないのはなぜですか?私を助けてください。

ありがとうございました。

+1

おそらくビューがロードされていないためですか? – woodleader

+0

ええとNSLogはNSLOGではありません。それは何のサブクラスですか?私は 'viewDidLoad'は' UIViewController'サブクラスでのみ呼び出されると思います。私にそれを引用しないでください。 –

+0

@Aurum:それは正しいです。 'viewDidLoad'メソッドは、ビューのロードが終了したときにコントローラ上で呼び出されます。 –

答えて

0

initの方法が正しくありません。

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

    return self; 
} 

これはFirstClassUIViewControllerに由来することを前提としています。それは次のようになります。

NIBファイルの名前がクラスと同じであれば、自動的にロードする必要があります。loadBundle:呼び出しの必要はありません。ここでthe documentationnibNameプロパティについて言っているのです:

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

+0

あなたの答えをありがとう。 – Pugal

2

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

+0

+1、@ Jasarien、あなたの答えをありがとう、私はXIBに読み込まれて、グループ化されたテーブルビューを使用している。だから私のxibはStephen Darlingtonの答えを実装するために読み込まれていません。しかし、その後、私は再びビューにロードされたnibファイルを読み込んで、適切にロードしました。 "[[NSBundle mainBundle] loadNibNamed:@" FirstClass "owner:self options:nil];" – Pugal

+0

実際には、私のコードで 'loadNibNamed:'メソッドを呼び出す必要はありません。クラスと同じ名前のxibファイルを探します。 "このプロパティの値がnilで、カスタムサブクラスのloadViewメソッドをオーバーライドしなかった場合、ビューコントローラは名前(.nib拡張子なし)がビューコントローラの名前と一致するnibファイルを探しますクラス。" –

1

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

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

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

あなたviewDidLoad方法について呼び出され、あなたのfeedDictionaryがあなたを待って、そこに座っされます。

関連する問題