Почему мой метод initWithNib не вызывается при загрузке контроллера представления? - PullRequest
2 голосов
/ 27 мая 2009

У меня есть класс, который наследуется от UIViewController. Там я хочу сделать инициализацию ivar следующим образом:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { // Load the view nib
    NSLog(@"Hello Earth!");
    if (self = [super initWithNibName:nibName bundle:nibBundle]) {
        self.visibleIndex = 0;
        NSLog(@"Hello Planet!");
    }
    return self;
}

Почему-то я вижу содержимое, которое было загружено с пера. Но по другой причине этот инициализатор никогда не будет вызван. Я никогда не получаю сообщения журнала. Что в этом плохого? У меня есть перо, так что на самом деле это должно быть вызвано, верно?

Ответы [ 2 ]

5 голосов
/ 27 мая 2009

Этот метод не используется, если ваш UIViewController создается пером. Вам необходимо переопределить viewDidLoad:

-(void) viewDidLoad {
    [super viewDidLoad];
    NSLog(@"Hello Planet");
}

initWithNibName используется только в том случае, если вы фактически создаете экземпляр контроллера с помощью кода.

0 голосов
/ 14 сентября 2010

Я думаю, вы думаете о viewLoaded, а не initWithNibName. viewLoaded - это то, что вызывается, если вы хотите настроить представление программно. initWithNibName вызывается, если вы загружаете с помощью пера .... отсюда и название? Но настройка представления не должна быть сделана до viewDidLoad, но другие вещи инициализации должны быть сделаны в initWithNibName, например, установка любых массивов или других переменных.

...