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).

Кажется, что-то волшебное о имени 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, где я это узнал.
  • Установка названия динамического представления из представления таблицы
  • Анимация не перезапускается при перемещении между диспетчерами просмотра
  • Как передать информацию обратно в контроллер просмотра из контроллера просмотра, к которому он нажат?
  • Обновить UIwebview без какого-либо тряски?
  • Портретная ориентация во всех диспетчерах просмотра, кроме контроллера модального просмотра
  • Изменение рамки в viewDidLayoutSubviews
  • У меня возникают проблемы с динамическим обновлением UILabel в одном контроллере от другого. Он должен соответствовать флажку, проверяемому в объективе-c
  • iOS 7 Table View Ландшафтная ширина ячейки
  • Правильно отпустите ViewController при добавлении subview без navigationController
  • Swift - отклонение контроллера просмотра из блока завершения
  • viewDidAppear вызывает диспетчер view, который отклоняется в iOS8
  • Interesting Posts

    Масштабирование UIImageView в соответствии с шириной с помощью AutoLayout

    UITableView не перезагружает данные или вызывает cellForRowAtIndexPath

    Проблемы с отображением полноэкранного CAEAGLLayer на Retina iPad

    Повторяющиеся элементы сцены в выводе видеоизображения iOS YUV

    Передача LocalStorage при установке плагина cordova-plugin-wkwebview-engine

    Как оптимизировать рендеринг большой модели в OpenGL ES 1.1?

    получить CGPoint внутри метода didSelectItemAtIndexPath CollectionView

    Как вы балансируете автоматический макет с созданием фреймов?

    Импорт инструкции для SDK Venmo iOS в быстрой для встроенных фреймворков

    Чтение строки из файла .strings в XCode

    заменить элемент вида в построителе интерфейса

    После отмены регистрации я получаю «класс освобожден, пока наблюдатели с ключевыми значениями все еще зарегистрированы»

    xcode sumbission, приложение, которое вы выбрали, не существует

    почему предварительный просмотр автозапуска и фактическое устройство не совпадают

    Xcode, в чем разница между «другими флагами Linker» и «Other_LDFLAGS»

    Давайте будем гением компьютера.