2016-03-04 82 views
1

我使用instantiateviewcontroller方法UIStoryboard從故事板加載UIViewcontroller。只要執行此方法,即使在initWithCoder之前調用viewDidLoad()方法。這種行爲是不同的,並與延遲加載相矛盾。儘快調用instantiateviewcontroller即可執行viewdidload

現在,問題是如何在UIViewcontroller上設置屬性,以便我可以在viewDidLoad方法中使用它們?

+0

我的想法是,你的視圖控制器在一些實例「instantiateviewcontroller」調用之前的其他方式。 – kirander

+0

感謝您的回覆,但不,我不在其他地方加載視圖控制器。此外,我不在代碼中的任何位置調用viewcontroller.view –

+0

雙向檢查視圖控制器的故事板。 – kirander

回答

0

我沒有正確理解你最初的問題。 但我想你想是這樣的

-(void) loadNewVC { 
    SampleViewController *sample = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sample"]; 
    NSData *birthData =[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://iglesiasSite.com"]]; 
    sample.someName = @"Enrique Iglesias"; 
    sample.someData = birthData; 

    [[[UIApplication sharedApplication] keyWindow] setRootViewController:sample]; 
} 

在SampleViewController.h類的頭

@interface SampleViewController : UIViewController 

@property (nonatomic, strong) NSString *someName; 
@property (nonatomic, strong) NSData *someData; 
@end 

SampleViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self processData: self.someData andName: someName]; 
} 
+0

這正是我正在做的,但只是在第一行SampleViewController * sample = [[UIStoryboard storyboardWithName:@「Main」bundle:nil] instantiateViewControllerWithIdentifier:@「sample」];'執行,viewDidLoad在裏面你會發現self.someData和self.someName是零,因爲它們還沒有被setter設置。 –

+0

@NishitGoenka我認爲你應該提供一個示例項目,上傳到github,讓人們看到這裏的全貌。否則,我不明白爲什麼Mr.Fingers的答案在任何方面都不正確。 –

+1

我和Fingers先生在這裏寫的完全一樣。問題在故事板中,我將UITableview連接爲tableview outlet和view outlet,並刪除了UIView對象,因此UITableview在實例化時加載,因爲它是viewcontroller的視圖出口,因此viewDidLoad()被調用 –

相關問題