ViewDidLoad 没有被调用
Posted
技术标签:
【中文标题】ViewDidLoad 没有被调用【英文标题】:ViewDidLoad does not get called 【发布时间】:2013-09-11 07:19:01 【问题描述】:我正在为 iPhone 和 iPad 开发一个应用程序。该应用程序有一个 TabBar 在 ViewControllers 之间切换。我知道,当为这两种设备开发应用程序时,我所要做的就是再次为 iPad 创建 Storyboard 项目,并将属性与我已经拥有的 ViewController 连接起来,即 FirstViewController 对于 iPhone 和 iPad 应用程序是相同的。
在 iPhone 应用程序中有三个选项卡,但由于 iPad 的屏幕尺寸更大,我希望 iPad 版本有两个选项卡。所以我想为 iPad 应用合并 SecondViewController 和 ThirdViewController。所以我决定继承UIViewController
并将其命名为MyViewController。在 MyViewController 内部有 SecondViewController
和 ThridViewController
的代码。
在模拟器中,我可以看到MyViewController
视图的背景图像和情节提要项目。问题是在MyViewController
类上没有调用viewDidLoad
方法(我在[super viewDidLoad]
之后有一个NSLog 语句)。我在 Idendity Inspector 的故事板中检查了该类是 MyViewController
。还尝试使用新的子类创建一个全新的 ViewController,但对于那个新的 ViewController,方法 viewDidLoad
方法没有被调用。
【问题讨论】:
对不起这个愚蠢的问题,我自己找到了答案。如果有人想知道这是因为当我运行该应用程序时,我使用 iPhone Simulator 完成了它,然后在“硬件”菜单中将设备更改为 iPad。但是当我将模拟器设置为 iPad 模拟器然后运行应用程序时,一切正常。 【参考方案1】:当您移动到 controller-B 时,标签栏控制器不会释放 controller-A,反之亦然。它们被分配一次,因此您看不到 viewDidLoad 时标签被打乱了。
您可能需要检查viewWillAppear
方法来查看是否调用了视图控制器!
【讨论】:
我不是指在选项卡之间随机播放,我的意思是当我第一次单击选项卡栏并加载 MyViewController 时,不会调用viewDidLoad
方法。我知道它只被调用一次。
在您添加 SecondViewController 和 ThridViewController 的位置分享您的 MyViewController 代码 - 这可能有助于推进它。
其实我找到了soultion并把它贴在了cmets上。但是我将代码添加到MyViewController
的方式只是复制粘贴。我只需要 iPad 版本的 ViewController 类,它包含与 iPhone 版本中的 SecondViewController
和 ThirdViewController
相同的代码。【参考方案2】:
您可以使用这些生命周期事件:
响应视图事件
– viewWillAppear:
– viewDidAppear:
– viewWillDisappear:
– viewDidDisappear:
– viewWillLayoutSubviews
– viewDidLayoutSubviews
- (void)viewDidAppear:(BOOL)animated
viewDidAppear 将在您的视图再次可见时被调用
【讨论】:
以上是关于ViewDidLoad 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
UIImagePickerController 在调用 alloc init 时真的很慢
awakeFromNib 被调用,viewDidLoad 未被调用