viewDidLoad не вызывается при использовании loadView

Может кто-нибудь объяснить, почему viewDidLoad не вызывается при использовании loadView? Насколько я понимаю, viewDidLoad все равно должен вызываться.

- (void)loadView
{
    CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];

    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];

    [super loadView];
}

- (void)viewDidLoad {

    //this never happens
    NSLog(@"VIEW DID LOAD!");
    [super viewDidLoad];
}

3 ответа

Я только что узнал, что viewDidLoad не будет вызываться, если вы вызываете loadView вручную в своем приложении. Если вы вызываете loadView вручную, вы должны также вызвать viewDidLoad вручную.

Более того, в соответствии с документами Apple, вы не должны вызывать [super loadView], так как он перезапишет ваше представление стандартным UIView.

Вы должны иметь предупреждение здесь:

NSLog("VIEW DID LOAD!");

Вместо этого вы должны написать так (необходим знак @):

NSLog(@"VIEW DID LOAD!");

viewDidLoad не будет вызываться при создании экземпляра ViewController. Когда вы отправляете его в контроллер навигации или представляете его как модель viewcontroller, вызывается только viewDidLoad. До тех пор, пока вы не представите viewController, эти делегаты не будут вызываться. И еще одна вещь, если ваша презентация viewcontroller закончилась и все еще остается в стеке или памяти, то метод viewDidLoad больше не будет вызываться, потому что он уже загрузил представление. Затем делегаты viewWillAppear и viewDidAppear вызываются только при представлении одного и того же viewController.

Другие вопросы по тегам