Ios InstanceEviewController标识符似乎调用viewdidload

Ios InstanceEviewController标识符似乎调用viewdidload,ios,objective-c,storyboard,instantiation,viewdidload,Ios,Objective C,Storyboard,Instantiation,Viewdidload,我试图以编程方式将ViewController推入导航控制器,并使用我的故事板创建它 这是我的密码: + (void) pushViewController:(NSString *) identifier ForItems:(NSMutableArray *) items sender:(UIViewController *) sender { GenericViewController *viewController = (GenericViewController *)[sender

我试图以编程方式将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];
}
GenericViewController viewDidLoad
中,我正在使用我的
项目
。由于一些断点,我看到
GenericViewController viewdiload
仅在
instantialeviewcontrollerwhidentifier
之后,items等于nil

我认为在
pushViewController
方法期间调用了
MyViewController viewDidLoad

您知道为什么在
实例化过程中调用
viewDidLoad

--更新:---

这里是我的
viewDidLoad

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

    [super viewDidLoad];


    [...]
}
self.items
为零。所以什么也没做。

参见:

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

视图将出现
通知视图控制器其视图即将添加到视图层次结构中。我认为这是当
[self.navigationController推viewController:viewController动画:是]被调用


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

中时,正如voyage11所提到的,当控制器的视图加载到内存中时调用viewDidLoad,尽管有人指出,这不一定在实例化EviewController WithiIdentifier方法期间发生

按照您的示例代码,我将把循环放在viewWillExample方法中:

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

给任何可能仍然有同样问题的人

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


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

您可以在Objective-C中使用
[vc loadViewIfNeeded]
,或者在Swift中使用
vc.loadViewIfNeeded()


请输入完整的代码..什么是myItem和viewDidLoad方法..问题不在于此..因为当您启动一个对象时,它是活动的。您需要提供更多信息。显示使用InstanceViewController WithiIdentifier:的整个方法。InstanceEviewController WithiIdentifier:方法不会导致调用viewDidLoad,因此会发生其他情况。谢谢@rdelmar我非常确定
InstanceEviewController WithiIdentifier
不要调用
viewDidLoad
。我更新了我的代码,我正在使用静态管理器实例化并推送我的新viewControllerI我仍然没有在您发布的代码中看到任何会导致在推送之前调用viewDidLoad的内容。您是否有到GenericViewController的任何segues设置?GenericViewController是一个独立的控制器吗(没有嵌入任何东西)?这是有道理的,但问题表明它是一种将属性传递给视图控制器的好方法。(,)您的初始语句不正确--viewDidLoad不会仅通过实例化视图控制器来调用。这一点很好。我已经更新了我的答案,以消除这种暗示。正如文档所述,永远不应该直接调用loadView()。
let sb: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let controller = sb.instantiateViewControllerWithIdentifier("LoadingView") as! LoadingViewController
controller.loadViewIfNeeded()