检查:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"Checking login--user value is %@", [defaults valueForKey:@"userID"]);
if ([defaults valueForKey:@"userID"] == NULL){
LoginViewController *loginController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[window addSubview:loginController.view];
[loginController release];
}
else {
[window addSubview:[navigationController view]];
}
当我将子视图放到另一个视图中的每个其他位置时,我在完成该视图后释放该视图,因为它现在由视图拥有,它是子视图。但是,当我执行[loginController release]
时,该loginController上的每个IBAction都会针对一个解除分配的实例进行调用。评论该行可以使一切正常。
我注意到我的loginController和模板附带的navigationController之间的方法不同; navigationController是一个在-(void)dealloc{ }
中释放的合成属性,因此在放入window
之后它仍然存在。
答案 0 :(得分:3)
-addSubview:
仅保留视图,不控制器。
答案 1 :(得分:0)
您不应手动将控制器视图添加到视图层次结构中,因为控制器不会被保留,即使保留也不会收到预期的系统调用(例如方向更改等)。
而是使用其UIWindow
属性将控制器添加到rootViewController
。
如果您仍然觉得需要在某处添加控制器的视图,那么您可能不应该使用视图控制器而是使用简单的自定义视图。