Почему метод инициализации подкласса UIViewController иногда не загружает файл с тем же именем nib?

#uiviewcontroller #nib #init

#uiviewcontroller #перо #инициализация

Вопрос:

Я знаю, что назначенный инициализатор UIViewController

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  

Если вы вызовете init , согласно документации, он загрузит файл nib с тем же именем класса (если он существует).

Но с чем я сталкиваюсь, так это с тем, что иногда init делает все правильно. Но иногда метод инициализации подкласса UIViewController просто не загружает файл nib. Я создаю их одним и тем же способом (используя помощник Xcode для создания подкласса UIViewController и связанного с ним файла nib одновременно, поэтому имя файла должно быть одинаковым).

Почему это происходит?

Ответ №1:

Я выяснил, что если класс является подклассом UITableViewController, вы должны использовать — (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil для инициализации из nib.

Это связано с тем, что инициализатор назначения UIViewController:

(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

поэтому, если вы используете init , он будет вызывать (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil вас.

Но инициализатор назначения UITableViewController:

 - (id)initWithStyle:(UITableViewStyle)style
  

использование init в UITableViewController вызовет initWithStyle not initWithNibName