UIViewController init vs initWithNibName: bundle: - PullRequest
5 голосов
/ 31 мая 2011

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

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

3 голосов
/ 31 мая 2011

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

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

1 голос
/ 01 февраля 2013

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

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

Ресурсы

...