instantiateViewControllerWithIdentifier似乎调用了viewdidload

Tho*_*ard 6 objective-c instantiation storyboard viewdidload ios

我试图以编程方式将ViewController推送到导航控制器,而我正在使用我的故事板来创建它.

这是我的代码:

+ (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];
}
Run Code Online (Sandbox Code Playgroud)

GenericViewController viewDidLoad我用我的items.多亏了一些断点,我已经看到了等于零GenericViewController viewDidLoad之后的juste .instantiateViewControllerWithIdentifieritems

我以为MyViewController viewDidLoadpushViewController方法中调用了.

知道为什么viewDidLoad在这期间被召唤instantiateViewControllerWithIdentifier

---更新:---

在这里我的 viewDidLoad

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

    [super viewDidLoad];


    [...]
}
Run Code Online (Sandbox Code Playgroud)

self.items没有.所以什么都没做.

小智 7

对任何可能仍有同样问题的人.

我遇到了类似的情况,只需调用loadViewIfNeeded()即可解决问题.

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

然后我可以访问视图中的所有内容.


Ric*_*cky 1

请参阅: 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.