viewDidLoad не вызывается при использовании loadView - PullRequest
3 голосов
/ 11 января 2011

Может кто-нибудь объяснить, почему 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 ]

7 голосов
/ 25 января 2011

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

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

3 голосов
/ 11 января 2011

У вас должно быть предупреждение здесь:

NSLog("VIEW DID LOAD!");

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

NSLog(@"VIEW DID LOAD!");
1 голос
/ 14 марта 2013

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

...