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.