viewDidLoad не работает (без NIB) - PullRequest
3 голосов
/ 23 ноября 2011

Я большой поклонник этого сайта в течение долгого времени, но это мой первый опубликованный вопрос.

Я прочитал все посты, похожие на тему (я думаю), однако они все используют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];
}

inMainViewController.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 Ответ

5 голосов
/ 23 ноября 2011

Если у вас нет nib-файла, вам следует реализовать метод loadView. См. «Создание представления программным способом» в разделе Пользовательские контроллеры представления Руководства по программированию контроллера представления. Если вы не реализуете этот метод, viewDidLoad не будет вызываться.

...