UIViewController init vs initWithNibName: bundle:

В моем приложении я нажимаю контроллер представления (UITableViewController), который также имеет свойство / выход, ссылающийся на UITableViewCell. Похоже, что создание контроллера с помощью:

PreferencesController *pController = [[PreferencesController alloc] init]; 

не создает объект для UITableViewCell в файле xib, поэтому выход имеет значение null, поэтому загрузка таблицы генерирует исключение. Я решил это с помощью:

 PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil]; 

но я действительно не понял, почему это сработало, поскольку из документации кажется, что init должен быть достаточным для загрузки связанного файла nib (PreferencesController.xib).

3 Solutions collect form web for “UIViewController init vs initWithNibName: bundle:”

Кажется, что-то волшебное о имени PreferencesController . У меня была точно такая же проблема. Переименование моего класса (и xib) на что-то другое решило проблему.

Изменить: я был некорректен, файлы nib должны загружаться автоматически с помощью alloc init если они названы так же, как и контроллер.

Каков владелец вашего файла в интерфейсе Builder? Изменение по умолчанию можно изменить, изменив это значение.

Вы должны переопределить initWithNibName:bundle: вместо init потому что это «назначенный инициализатор». Когда вы загружаете это из файла Nib, это вызываемое сообщение создателя.

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization } return self; } 

Ресурсы

  • Вы можете видеть, что это назначенный инициализатор в своих родительских классах документов UIViewController .
  • Вы можете узнать больше о назначенных инициализаторах в документах Apple
  • Связанный вопрос SO, где я это узнал.
  • willRotateToInterfaceOrientation устарела, но не понимает viewWillTransitionToSize: withTransitionCoordinator:
  • Swift - программно перейдите к другому контроллеру / сцене
  • Как создать пользовательские пользовательские параметры выбора даты в одном и том же UIView в swift
  • viewWillAppear не вызывается для контроллера subview
  • Навигационный контроль UIViewController равен нулю
  • После обновления до iOS 7 все виды в iOS 6 переместились вверх и скрыты на панели навигации
  • Переключение между несколькими видами в одном и том же диспетчере представлений
  • Мгновенно запускать UIViewController программно без наконечника
  • Как изменить размер представления при использовании UINavigationController setToolbarHidden: анимированный:
  • Задержка при использовании метода instantiateViewControllerWithIdentifier, но не выполнение функции SigueWithIdentifier?
  • Использование MMDrawerConroller, как отключить ротацию, - это некоторые ViewControllers?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.