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: 加载了“视图”笔尖,但未设置视图出口。