Путаница с initWithNibName и loadView - PullRequest
2 голосов
/ 23 октября 2011

Всегда ли initWithNibName вызывается всегда, когда программно или IB?

Пример:

У меня есть два viewController, один с именем PhotoViewController, другой с именем ViewController.PhotoViewController создает представление программно, но без комментария initWithNibName.

Вот мой PhotoViewController.m:

- (void)loadView
{
    NSLog(@"loadView in PhotoView");
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen 
                                                  mainScreen].applicationFrame]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    self.view = view; 
    [view release]; 
}

// Loading views from a nib file.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    NSLog(@"PhotoViewController initWithNibName=%@",nibNameOrNil);
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

Вот мой вызов в ViewController.m

- (void) doSearchFlickr
{
    PhotoViewController *pController  = [[PhotoViewController alloc]init];
    [self.view addSubview:pController.view];
    [pController release];
}

Затем я вижу что-то, что смущает меня в журнале:

2011-10-23 10:52:52.151 TableViewPG[1192:b303] PhotoViewController initWithNibName=(null)
2011-10-23 10:52:52.153 TableViewPG[1192:b303] loadView in PhotoView

Согласно ViewControllerPGforiPhoneOS на стр. 30, если я переопределяю loadView программно, initWithNibName не должен вызываться.

Есть ли какой-либо недостаток (с) по моей логике?

1 Ответ

2 голосов
/ 23 октября 2011

-[UIViewController init] просто выполняет [self initWithNibName:nil bundle:nil]. Вы можете легко проверить это, поместив точку останова в -[PhotoViewController initWithNibName:bundle:] и посмотрев на стек вызовов.

Ваш -[PhotoViewController loadView] в порядке.

Руководство по программированию контроллера представления для iOS ничего не говорит о initWithNibName:bundle: на стр. 30.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...