Как я могу использовать файлы InterfaceBuilder в подпроектах Xcode? - PullRequest
3 голосов
/ 05 октября 2010

Я разрабатываю приложение для iPhone, которое является «модулем» другого средства запуска (оно не запускается с домашнего экрана iPhone). Чтобы добавить этот модуль в панель запуска, мне нужно вставить файл xcode в родительский проект xcode (создание подпроекта). Подпроект использует файл NIB в качестве контроллера представления, а подпроект загружает файл, используя initWithNib:

root_view_controller = [[UINavigationController alloc] initWithRootViewController:[[LMU_IP_RootView alloc] initWithNibName:@"LMU_IP_RootView" bundle:nil]];

Когда я пытаюсь запустить родительский проект, он вылетает с:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle [...] (loaded)' with name 'LMU_IP_RootView''

Я предполагаю, что он не может найти файл NIB, потому что корневой пакет теперь является родительским проектом, а не подпроектом. Я мог бы включить NIB в родительский проект, и это исправляет ошибку, но не решает мою проблему.

Итак, мой вопрос: как мне использовать файлы InterfaceBuilder в подпроекте? Нужно ли указывать комплект? Как мне указать пакет, который ссылается на этот подпроект?

Спасибо!

1 Ответ

0 голосов
/ 13 мая 2011

Если для пакета nil, поиск выполняется в основном пакете, а не в вашем подпроекте.Я не совсем понимаю архитектуру вашего приложения, но попробуйте указать пакет, содержащий класс, в качестве пакета для поиска:

NSBundle *classBundle = [NSBundle bundleForClass:[LMU_IP_RootView class]];
id vc = [[LMU_IP_RootView alloc] initWithNibName:nil bundle:classBundle]
root_view_controller = [[UINavigationController alloc]
                        initWithRootViewController:vc];
[vc release];

Обратите внимание, что nil имя пера по умолчанию равно " ClassName .nib ", поэтому в этом случае будет выполняться поиск LMU_IP_RootView.nib.

Обычно лучше переопределить -init в вашем классе контроллера представления, чтобы он выполнял правильный поиск.Тогда клиентскому коду не нужно беспокоиться о том, что нужно классу.

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