很长一段时间以来,我一直是这个网站的忠实粉丝,但这是我发布的第一个问题。
我已经阅读了与主题相似的每个帖子(我认为),但是他们都在使用NIB文件。 我的项目中没有任何nib文件。
这是一个带有一个视图的简单项目(所以这意味着一个委托类,一个uiviewcontroller类和一个uiview类),我的视图显示正常,但从未调用viewDidLoad方法。
main.m看起来像这样:
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"MyAppDelegate");
[pool release];
return retVal;
}
MyAppDelegate.m看起来像这样:
-(void)applicationDidFinishLaunching:(UIApplication *)application{
UIWindow *localWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window = localWindow;
[localWindow release];
MainViewController *viewController = [[MainViewController alloc] init];
//Option 1
navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
////Option 2
//navigationController = [[UINavigationController alloc] init];
//navigationController.viewControllers = [NSArray arrayWithObject:viewController];
////Option 3
//navigationController = [[UINavigationController alloc] init];
//[navigationController pushViewController:viewController animated:NO];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
[viewController release];
}
MainViewController.m中的
- (id)init {
self = [super init];
if (self) {
self.title = @"Root";
MainView *myView = [[MainView alloc] init];
[myView initWithParentViewController:self];
self.view = myView;
[myView release];
}
return self;
}
最后,在“MainViewController.m”中,永远不会触发(但会显示视图):
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"VIEW DID LOAD");
}
答案 0 :(得分:5)
如果没有nib文件,则应该实现loadView方法。请参阅View Controller编程指南的Custom View Controllers部分中的“以编程方式创建视图”。如果不实现此方法,则不会调用viewDidLoad。