我觉得这很奇怪,但同样的代码在我的其他应用程序中运行正常所以,我在iphone app委托中重写我的功能,它继承了作为主代表的超级类
* .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错误
答案 0 :(得分:0)
您没有初始化视图控制器。 iOS为视图控制器分配了空间,但您没有对其进行初始化。
LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] init];
你为什么打电话给[super.window addSubview:login_view.view];
而不是[window addSubview:login_view.view];
?
appDelegate的超级是NSObject,它没有窗口属性。
答案 1 :(得分:0)
首先,使用内置模板及其nib文件通常会使所有这些变得更加简单,我强烈建议不要尝试以这种方式构建它。那就是说,让我们来谈谈正在发生的事情。
您正在创建一个视图控制器,然后将其视图移出并将其放入窗口中。然后你扔掉视图控制器,它正确地解除分配。我不知道你会在哪里调用UITextField.text
,但是当这个方法完成时,视图控制器就应该消失了。如果要保持视图控制器,则需要将其放在ivar中。
正如@Cyupa所说,你不应该在这里使用super.window
。您应该使用self.window
,但理想情况下,如果可以的话,您应该使用其中一个模板。