Как загружается удаленный xib? - PullRequest
6 голосов
/ 13 января 2012

Я создал класс 'abc', который является подклассом UIViewController.Во время создания я выбрал опцию для автоматического создания xib для него.Теперь xcode создает для меня 3 файла: 1. abc.h 2. abc.m 3. abc.xib.

Теперь всякий раз, когда я создаю объект класса abc, такой как abc * a = [abc alloc];

Даже когда я не инициализирую объект с initiwithNibName и не использую его, он загружает файл xib.Так как этот xib-файл был связан с объектом abc.И даже если я удалил abc.xib, он также загружает этот файл xib.Я не мог понять, откуда он загружает xib-файл, если его нет в пространстве проекта.А где хранится ассоциация xib и controller?

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 25 мая 2013

Что происходит, так это то, что стандартная реализация initWithNibName:bundle: ищет в главном пакете файл Nib с тем же именем, что и у вашего класса View Controller.Это происходит независимо от того, выбираете ли вы вариант автоматического создания пера или нет.См. Документацию UIViewController (часть обсуждения initWithNibName:bundle:).

Теперь метод initWithNibName:bundle: является инициализатором UIViewController по умолчанию, что означает, что даже если вы не используете его напрямую (скажем,что вместо этого вы используете init) он все равно будет вызываться изнутри.

Наконец, даже если вы удалите файл Nib из XCode, по какой-то причине (не знаю почему) он не удаляется изОсновной комплект (хотя бы в симуляторе).Даже если вы очистите и построите проект, он останется там. Решение, которое я использую, чтобы полностью избавиться от файла Nib, состоит в том, чтобы удалить приложение из симулятора, а затем очистить и собрать заново.

Надеюсь, это поможет!

1 голос
/ 13 января 2012

Вероятно, xib все еще находится в вашей скомпилированной области, поэтому вам нужно выполнить очистку, чтобы полностью избавиться от него.(Продукт >> Чистый).Метод init по умолчанию для UIViewControllers автоматически ищет xib с тем же именем, поэтому он все еще выделяет этот xib.После очистки он остановится.

Ссылка: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/initWithNibName:bundle:

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

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