UIViewController 未调用 viewDidLoad 且未创建 UIView 导致崩溃

Posted

技术标签:

【中文标题】UIViewController 未调用 viewDidLoad 且未创建 UIView 导致崩溃【英文标题】:UIViewController not calling viewDidLoad & not creating UIView causing crash 【发布时间】:2012-12-31 20:33:13 【问题描述】:

我已经在这工作了几个小时了。我在这个项目中有几个视图控制器,没有一个会引起问题,但现在突然之间有了这个新的控制器。我什至删除了它并制作了一个“测试”视图控制器,但没有骰子。我能说的最好的就是它实际上并没有创建它的视图,因此当引用该视图时,应用程序崩溃了。除了 -viewDidLoad 方法中的日志语句外,测试 VC 没有添加或删除代码。我没有覆盖-loadView。我尝试将视图添加到子视图,尝试将 VC 推入导航控制器,我什至尝试过简单地记录 test.view。我曾尝试使用 NIB 创建 VC,但没有尝试过。绝对没有任何效果。任何帮助将不胜感激。

在另一个 VC 中创建 VC。日志语句导致崩溃。但是添加为子视图甚至推入导航控制器也是如此。

    TestViewController *test = [[TestViewController alloc] init];
NSLog(@"test view = ", test.view);

TestViewController 的实现。

    @implementation TestViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"view = %@", self.view);


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

【问题讨论】:

不支持嵌套 VC,不会传播对 viewDidLoad(和类似方法)的调用。 我无法从项目中的任何位置访问此视图。即使在应用程序委托中,我也已经在多个不同的类中尝试过它。 调试器控制台崩溃时会显示哪些消息?或者 Xcode 是否使用绿色的 EXC_BAD_ACCESS 标记或类似标记来标记一行代码或汇编程序? 【参考方案1】:

我想说仔细检查视图中的所有连接。特别是如果它被复制或移动,因为它很容易与旧 VC 建立连接

【讨论】:

【参考方案2】:

如果您没有在项目中使用 ARC,则不要检查 nib 文件的自动布局框。如果您使用的是 ARC,那么它与文件所有者的连接可能是唯一的问题。

【讨论】:

【参考方案3】:

如果您使用 xib,并且项目是从其他 xib 或故事板复制的,请确保根视图存在,然后拖动到文件的所有者。

【讨论】:

以上是关于UIViewController 未调用 viewDidLoad 且未创建 UIView 导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中未调用 UIViewController 设备旋转委托方法

单个 UIViewController 中的多个集合视图未调用 cellForItemAtIndexPath indexPath

UIViewController _loadViewFromNibNamed:bundle: 加载了“视图”笔尖,但未设置视图出口。

fourColor01

loadView的使用总结

长路漫漫,唯剑作伴--loadViewviewDidLoad及viewDidUnload的关系