instantiateViewControllerWithIdentifier似乎调用viewdidload

我正尝试将ViewController以编程方式推送到导航控制器中,然后使用我的故事板创build它。

这里是我的代码:

+ (void) pushViewController:(NSString *) identifier ForItems:(NSMutableArray *) items sender:(UIViewController *) sender { GenericViewController *viewController = (GenericViewController *)[sender.storyboard instantiateViewControllerWithIdentifier:identifier]; viewController.items = [[NSMutableArray alloc] init]; [viewController.items removeAllObjects]; [viewController.items addObject:[[NSMutableArray alloc] init]]; [viewController.items[0] addObjectsFromArray:items]; [sender.navigationController pushViewController:viewController animated:YES]; } 

GenericViewController viewDidLoad我正在使用我的items 。 由于一些断点,我已经看到, GenericViewController viewDidLoadinstantiateViewControllerWithIdentifieritems等于零。

我以为在pushViewController方法中调用MyViewController viewDidLoad

任何想法为什么viewDidLoadinstantiateViewControllerWithIdentifier期间被调用?

—更新:—

在这里我的viewDidLoad

 - (void)viewDidLoad { for (MyItem *currentItem in self.items[0]) { [Do Something] } [super viewDidLoad]; [...] } 

self.items是零。 所以没有做任何事情。

对任何人可能仍然有相同的问题。

我有类似的情况,并通过调用loadViewIfNeeded()来解决它。

 let sb: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let controller = sb.instantiateViewControllerWithIdentifier("LoadingView") as! LoadingViewController controller.loadViewIfNeeded() 

我可以访问视图内的所有内容。

请参阅: https : //developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewDidLoad

当控制器视图加载到内存中时,调用viewDidLoad

viewWillAppear通知视图控制器其视图即将添加到视图层次结构中。 我认为这是当[self.navigationController pushViewController:viewController animated:YES]; 叫做。

viewDidAppear通知视图控制器其视图已添加到视图层次结构中。 这是当MyViewController被添加到navigationController

正如voyage11所提到的,当控制器的视图被加载到内存中时,viewDidLoad被调用,尽pipe有人指出在instantiateViewControllerWithIdentifier方法中不一定会发生这种情况。

遵循你的示例代码,我把这个循环放在viewWillAppear方法中:

 - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // good practice to call the super for (MyItem *currentItem in self.items[0]) { [Do Something] } } 

您可以尝试使用“[self loadViewIfNeeded]” 为obj-c或“self.loadViewIfNeeded()” 为swift ; 'self'=你的ViewController

apple:loadViewIfNeeded