viewDidLoad不工作(没有NIB)

时间:2011-11-23 16:42:41

标签: ios uiviewcontroller uinavigationcontroller viewdidload

很长一段时间以来,我一直是这个网站的忠实粉丝,但这是我发布的第一个问题。

我已经阅读了与主题相似的每个帖子(我认为),但是他们都在使用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");
}

1 个答案:

答案 0 :(得分:5)

如果没有nib文件,则应该实现loadView方法。请参阅View Controller编程指南的Custom View Controllers部分中的“以编程方式创建视图”。如果不实现此方法,则不会调用viewDidLoad。