在我以编程方式启动的其中一个视图中,我看到了对“loadView
/ viewdidLoad
”的5个不同调用,但我不明白为什么要调用这些调用。有人可以向我解释一下这背后的机制吗?
我以下列方式在父UIViewController
(TabBar
+ NavigationBar
应用程序)实例的一部分中启动视图:
MainEditController *editController = [[MainEditController alloc] initWithNibName:@"MainEditView" bundle:nil];
[self.navigationController pushViewController:editController animated:YES];
[editController release];
然后我记录MainEditController's
viewDidLoad
和loadView
方法(并调用各自的超级方法)。
'MainEditView
'笔尖包含3个项目:
-File的所有者(类型MainEditController
),
- 第一响应者(类型UIResponder
)
-View(类型UIView
)
视图插座连接到文件所有者,视图中没有元素。我打算做的是在主视图中添加几个子视图,并根据特定条件显示一个子视图。
我认为viewDidLoad
和loadView
会在控制器内被调用多个视图(在本例中为1),但这似乎不是一个有效的假设。
答案 0 :(得分:14)
您的loadView
方法是否正在调用[super loadView]
?如果没有,视图属性可能没有正确设置,因此访问下一个time .view
,它会尝试再次加载它。
在黑暗中刺伤,但没有loadView
方法,很难缩小可能出现的问题。
答案 1 :(得分:6)
我不确定这是否是您所看到的,但如果应用程序收到内存不足警告,导航控制器将释放当前无法恢复内存的视图。当视图再次可见时,将重新创建视图,该视图将调用loadView。
答案 2 :(得分:1)
我通过删除-(void)loadView
方法解决了同样的问题。如果在没有nib文件的情况下创建UIViewController
,则此方法将自动添加到代码中。
答案 3 :(得分:0)
将视图控制器的view属性设置为有效视图。