2009-06-11 45 views
6

在我以编程方式启动的其中一个视图中,我看到5个不同的呼叫'loadView/viewdidLoad',但我不明白为什么会有这么多人被调用。有人能向我解释这背后的机制吗?多次调用viewDidLoad/loadView

我启动视图在父UIViewController(一个TabBar + NavigationBar应用程序的一部分)例如以如下方式进行:

MainEditController *editController = [[MainEditController alloc] initWithNibName:@"MainEditView" bundle:nil];   
[self.navigationController pushViewController:editController animated:YES];   
[editController release]; 

我然后登录MainEditController'sviewDidLoadloadView方法(以及调用它们各自的超级方法) 。

在 'MainEditView' 笔尖包含3项: -File的拥有者(MainEditController类型的), - 第一 抢答(UIResponder类型的) -View(UIView类型的)

视图出口连接到文件的所有者和视图中没有任何元素。我打算做的是在主视图中添加多个子视图,并根据特定条件显示其中一个子视图。

我认为viewDidLoadloadView会在控制器中调用尽可能多的视图(在这种情况下为1),但这似乎不是一个有效的假设。

+0

有没有可能发布您的MainEditController loadView函数? – marcc 2009-06-11 19:36:00

回答

14

是你的loadView方法调用[super loadView]?如果没有,视图属性可能没有正确设置,所以下一个time .view被访问,它会尝试再次加载它。

刺在黑暗中,但没有loadView方法,很难缩小可能存在的问题。

+6

loadView状态的文档:此方法的自定义实现不应调用超级。 – 2010-01-14 14:34:37

6

我不确定这是否是您所看到的,但如果应用程序接收到低内存警告,导航控制器将释放当前不可见的视图以重新获得内存。当视图再次可见时,重新创建视图,该视图调用loadView。

0

将视图控制器的视图属性设置为有效视图。

1

我通过删除-(void)loadView方法来解决同样的问题。如果您创建不带nib文件的UIViewController,则此方法将自动添加到代码中。