#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