Что в действительности делает initWithNibName? - PullRequest
2 голосов
/ 19 июня 2011
theTestController = [[[CustomCell alloc]initWithNibName:@"CustomCell" bundle:[NSBundle mainBundle]]autorelease];

Я предполагаю, что он загрузит CustomCell и установит theTestController в качестве владельца. Если так:

  1. Почему в большинстве примеров кода для cellForRowAtIndexPath я вижу [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner: theTestController options:nil]; вместо этого?

  2. В чем разница между [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner: theTestController options:nil]; и theTestController = [[[CustomCell alloc]initWithNibName:@"CustomCell" bundle:[NSBundle mainBundle]]autorelease];

  3. Я попытался заменить [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner: theTestController options:nil]; на theTestController = [[[CustomCell alloc]initWithNibName:@"CustomCell" bundle:[NSBundle mainBundle]]autorelease];, и я получил ошибки. Похоже, розетки остаются nil, если я использую последний.

1 Ответ

6 голосов
/ 19 июня 2011

initWithNibName:bundle: - это удобный метод, объявленный в UIViewController и доступный его подклассам.Это инициализирует контроллер представления путем загрузки пера, возможно, с использованием внутреннего метода loadNibName:owner:options:.

initWithNibName:bundle: недоступен для UIView и его подклассов.Поэтому мы должны использовать loadNibName:owner:options: для загрузки представлений.

  1. Пользовательские ячейки являются UIView подклассами и, следовательно, используют loadNibName:owner:options:.
  2. Не большая разницаinitWithNibName:bundle: - это удобный метод инициализации UIViewController.
  3. Вы получаете ошибки по причинам, указанным выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...