Как связать контроллер представления и XIB-файл - PullRequest
1 голос
/ 02 октября 2011

Когда я создаю uiviewcontroller из мастера «новый файл ...» с опцией «создать файл xib», я могу загрузить его просто SomeViewController *view = [[SomeViewController alloc] init].Но когда я переименовываю имя файла xib, этот код перестает работать, хотя владелец файла в xib по-прежнему является правильным контроллером представления.

Я обнаружил, что могу открыть окно только по телефону initWithNib.Мне просто интересно, что связывало XIB с контроллером представления за сценой?Могу ли я по-прежнему использовать init для загрузки XIB после переименования файла?

С уважением

Leo

1 Ответ

2 голосов
/ 02 октября 2011

Я могу загрузить его просто SomeViewController *view = [[SomeViewController alloc] init].

Вы можете, но (IMO) вы не должны. Назначенный инициализатор для UIViewController: -initWithNibName:bundle:. Вы могли бы реализовать метод -init в вашем собственном контроллере представления, который вызывает [super initWithNibName:nil bundle:nil], но я думаю, что код понятнее, если вы придерживаетесь того же имени.

Кроме того, убедитесь, что вы прочитали документацию для UIViewController, особенно обсуждение, которое гласит:

Если вы укажете nil для параметра nibName, вы должны либо переопределить метод loadView и создайте свои представления там, или вы должны предоставить nib-файл в вашем комплекте, чье имя (без расширения .nib) соответствует имени вашего класса контроллера представления.

Вот почему контроллер представления будет загружать файл .xib, который имеет то же имя, что и класс контроллера представления (или имя, возвращаемое методом -nibName, как объяснено чуть более подробно в документации).

Короче говоря, UIViewController функционирует именно так, как задокументировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...