[英]Not able to release view Controller/ cause EXC_BAD_ACCESS
我认为这很奇怪,但是相同的代码在其他应用程序中对我来说很好用,所以,我在继承了作为主委托的Super类的iphone应用程序委托中重写了我的函数
* .appdelegate_iPhone.h *
@interface AppDelegate_iPhone : AppDelegate
{
}
@end
* .appdelegate_iPhone.m *
........
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] initWithNibName:@"LoginViewController_iPhone" bundle:nil];
[super.window addSubview:login_view.view];
[super.window makeKeyAndVisible];
//[login_view release];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
......
@end
如您所见,我注释掉了释放login_view的原因,因为如果我不释放对象,那么之后我将无法控制任何IBoutlet UIField。
我的意思是,如果我释放login_view并尝试使用UITextField.text,我会得到exc_bad_access错误
您没有初始化视图控制器。 iOS为视图控制器分配了空间,但尚未初始化。
LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] init];
为什么要调用[super.window addSubview:login_view.view];
而不是[window addSubview:login_view.view];
?
appDelegate的超级对象是NSObject ,它没有window属性。
首先,使用内置模板及其nib文件通常会使所有这些操作变得更加简单,我强烈建议您这样做,而不是尝试以此方式进行构建。 也就是说,让我们谈谈正在发生的事情。
您正在创建一个视图控制器,然后将其视图取出并放入窗口中。 然后,您将丢弃正确分配的视图控制器。 我不知道您将在哪里调用UITextField.text
,但是在此方法完成时,视图控制器应该已经消失了。 如果要保留视图控制器,则需要将其放在ivar中。
如@Cyupa所述,您不应在此处使用super.window
。 您应该使用self.window
,尽管理想情况下,如果可以的话,应该使用其中一个模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.