Iphone 调用viewDidLoad,VIEWWILLEXPEND未调用,视图未显示在屏幕上

Iphone 调用viewDidLoad,VIEWWILLEXPEND未调用,视图未显示在屏幕上,iphone,cocoa-touch,uikit,Iphone,Cocoa Touch,Uikit,更新 已经提到,根据文档,不会调用ViewWillDisplay和ViewDidDisplay。 但是,我在这些方法中不执行初始化,也不向视图中添加UI元素 我只是用它们来放置断点来调试它 还有其他想法吗 原始问题 我被难住了。我正在重构一些代码,遇到了一些奇怪的行为 我在没有nib的情况下初始化viewController A,并以编程方式设置视图 调用控制器A中的viewDidLoad 在viewController A的viewDidLoad中,我从nib初始化viewControlle

更新

已经提到,根据文档,不会调用ViewWillDisplay和ViewDidDisplay。 但是,我在这些方法中不执行初始化,也不向视图中添加UI元素

我只是用它们来放置断点来调试它

还有其他想法吗


原始问题

我被难住了。我正在重构一些代码,遇到了一些奇怪的行为

我在没有nib的情况下初始化viewController A,并以编程方式设置视图

调用控制器A中的viewDidLoad

在viewController A的viewDidLoad中,我从nib初始化viewController B

我将viewControllerB.view添加为viewControllerA.view的子视图

调用控制器B的viewDidload


然后它变得很奇怪:

  • VIEWWILLISE和VIEWDID出现在 视图控制器B从不获取 打电话来

  • viewControllerB.view从不制作 它在屏幕上显示

  • 无错误


  • 我检查过的东西:

    viewControllerBs Nib的名称正确

    viewControllerB的视图出口连接到视图

    viewControllerB及其视图均为非零

    最重要的是,SDK[修订版]beta 5中的一切都非常好

    有什么想法吗?
    这一定很愚蠢。

    如果通过代码将视图控制器添加到视图层次结构中,视图控制器将不会获得
    视图将出现
    (或
    视图显示
    )消息。如果您自己添加,您必须自己向视图控制器发送消息。

    试试看

    -(void) viewDidAppear:(BOOL)animated {
    // whatever
    }
    
    结束这件事:

    我一直找不到解决方案,但从那时起,SDK3.0就成为了标准,这一点变得毫无意义。该代码在当前版本的SDK中工作正常。

    不要忘记调用

    [super viewWillAppear:animated];
    
    无论你在哪里重新定义它

    文件说:

    如果重写此方法,则必须在实现中的某个点调用super


    我猜你的观点不是根观点。您可能正在使用UINavigationController,因此请尝试实现此方法

    - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    
    还是这个

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    
    并添加您的viewDidLoad

    this.navController.delegate = self;
    

    (别忘了在你的.h文件中添加UINavigationControllerDelegate协议。

    所以这对sdk3有效,但对早期的sdk3无效?请参阅Ramin关于ViewWillapea的答案。它在文档中,但不容易找到。不确定为什么viewControllerB从未出现在屏幕上。你是否在ViewWillapea中进行了重要的初始化r?+1对于在此提问之前检查的内容列表否,我在viewDidLoad之外不执行初始化是的,它在3.0中可以工作,我继续通过编译3.0来完成我的常规编码,但我真的想在2.2.1中也进行编译。谢谢,这有助于我理解为什么不调用ViewWillIspes/DidIspes。然而,问题一直存在我使用带有导航控制器/viewcontrollers和ViewDidIsped的故事板ng打电话来…原因是我已经从我的自定义子类中注释掉了[super viewdide:animated],我的一个viewControllers继承自.Doh!不知道我最初为什么这样做(我认为是为了解决竞争条件)。取消注释解决了这个问题!感谢提醒!