2011-07-07 11 views
2

1つのViewControllerから別のViewControllerにナビゲートしたい。これの一部として、私は にViewControllerを渡したいと思っています。私はいくつかの情報に移動したいです。私は の情報を、ターゲット viewControllerで外部オブジェクトとしてフックするオブジェクトにカプセル化しました。自己初期化されたViewControllerにUINibExternalObjectsを注入する

IBの内部に外部オブジェクトを作成しました.NibLoadingメソッドに渡されるNSDictionaryで参照した識別子を渡しました。私が期待したもの

NSArray* topLevelObjs = nil; 
NSMutableDictionary* options = [[NSMutableDictionary alloc] initWithCapacity:1]; 
NSMutableDictionary* config = [[NSMutableDictionary alloc] initWithCapacity:1]; 

id detailImageVC = [[SelectedImageModalViewController alloc] init]; 
SelectedImageModalModel* selectImageModalModel = [[SelectedImageModalModel alloc] init]; 
selectImageModalModel.imageName = @"[email protected]"; 

[config setValue:selectImageModalModel forKey:@"SelectImageModalModel"]; 
[options setValue:config forKey:UINibExternalObjects]; 

topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"SelectedImageModalViewController" owner:detailImageVC options:options]; 
if ([topLevelObjs count] == 0) 
{ 
    NSLog(@"Warning! Could not substitute proxy objects in xib file.\n"); 
    return; 
} 

[appDelegate.navigationController presentModalViewController:detailImageVC animated:YES]; 

[options release]; 
[config release]; 
[selectImageModalModel release]; 
[detailImageVC release]; 

私はpresentModalViewControllerと呼ばれた後ということであった:アニメーション:私は私の接続外部オブジェクト と非常に同じdetailImageVC上のviewDidLoadへの呼び出しを受け取ることになります。

代わりにどちらも発生しません。 viewWillApear:は呼び出されますが、detailImageVCは外部参照を保持しません。

ご意見、ご意見、ご感想をお待ちしております。ありがとう!

答えて

1

viewDidLoadは、ViewControllerだけがビュー自体をロードした場合に呼び出されます。

たとえば、 initWithNibNameはビューをロードせず、ペン先名を設定するだけです。 ViewControllerが将来のある時点でそのビューを必要とし、ViewController.viewにビューがない場合、ViewControllerはビューの読み込みを行い、次にviewDidLoadの呼び出しを行います。

コードはViewController自体のビューを読み込みます。ですから、このようなあなたのコード内でviewDidLoadメソッドを呼び出す必要があります:

topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"SelectedImageModalViewController" owner:detailImageVC options:options]; 
if (topLevelObjs.count == 0) { 
    NSLog(@"Warning! Could not substitute proxy objects in xib file.\n"); 
    return; 
} else { 
    [detailImageVC viewDidLoad]; 
} 

detailImageVC、あなたはIBOutletバインディングと@property対応するために、あなたのSelectedImageModalViewControllerのためのあなたのnibファイルをチェックする必要がありますあなたの外部のオブジェクトを保持していない場合。プロパティがARCの@property(nonatomic, strong)のように強くない場合、または@property(nonatomic, retain)のようなNon-ARCのレイテンシではない場合、nibから目覚めた後にオブジェクトを保持しません。

関連する問題