viewDidLoad未调用

时间:2013-03-14 16:46:17

标签: ios6 uiviewcontroller viewdidload

使用非常标准的布局,一切都在故事板中。 Storyboard picture

带有UISplitViewController详细视图控制器的

UINavigationController,用于加载我的自定义UITableViewController。只有自定义viewDidLoad中的UITableViewController才会触发。

viewWillAppear按预期发射,其他一切都完美无缺。清楚地加载了视图(唯一不起作用的是我在viewDidLoad中设置的通知),我的回调在哪里?

我的viewDidLoad方法...... viewDidLoad code 断点,NSLog ...如果执行此方法,这些东西都不会给我反馈。

4 个答案:

答案 0 :(得分:4)

我尝试使用拆分视图模板创建一个新项目来重新创建我的故事板。然后复制所有适当的视图控制器。它按预期工作。 (viewDidLoad正常调用。)

我将所有项目之间的IB连接并排比较......没有区别。然后,我接受了原始项目并逐个删除了所有连接,然后重新连接它们(与它们连接的完全相同的东西)。当我完成后,我运行代码,一切正常。 viewDidLoad致电。

我尝试在非工作故事板版本和工作版本之间做差异,因为没有什么应该是不同的,但显然有些东西。我无法做出它的正面或反面虽然大部分XML都是相同的,但许多位是XML文件的不同部分,这使得标准差异变得不切实际。这更像是一个试图找到彼此匹配的地方的拼图游戏,我在一小时没找到任何东西后放弃了。

这是一个非常令人难以置信的答案。它与IB有关,很可能是出口(但我确实重新输入了类名和东西......再次相同)。最有可能是我的错误而不是Xcode,但看起来我不能确定原因。

感谢您的建议,他们帮助我了解导致解决方案的各个方向。

答案 1 :(得分:1)

我怀疑你期待viewDidLoad在已加载时被调用,并且可能只是从主视图控制器更新。在这种情况下,它不必从nib / storyboard重新加载,因此不会调用viewDidLoad

将日志语句放入viewDidLoad,您将看到它至少被调用一次。

答案 2 :(得分:1)

检查视图控制器子类的名称是否与另一个类发生冲突。

在我的情况下,我心不在焉地保留了自动生成的项目类前缀'MP',因此项目的根视图控制器子类是MPViewController。

MPViewController没有在任何地方记录,但因为只有在链接到MediaPlayer框架时才会出现问题,所以可以安全地确定它是在某处定义的,当故事板被加载时,应用程序创建了一个实例,而不是我的自定义实例类。

答案 3 :(得分:1)

您可能在创建项目后创建了Storyboard文件。如果是这样,您应该从AppDelegate.m文件中删除字符串:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];