Загрузка пера из моего собственного комплекта?

я пытаюсь поместить файлы NIB/XIB в пакет, который я называю Configuration.bundle. Когда я пытаюсь загрузить xib из своего пакета, приложение падает, потому что не может найти файл xib.

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle]
pathForResource:@"Configuration" ofType:@"bundle"]];
[bundle load];
NSLog(@"bundle: %@", bundle);

я получаю вывод

комплект: NSBundle (еще не загружен)

Часть «еще не загружена» меня немного пугает. Почему не загружается?

И, наконец, когда я пытаюсь загрузить свой наконечник с помощью контроллера представления

ConfigViewController *configViewController = [[ConfigViewController alloc] initWithNibName:@"ConfigViewController" bundle:bundle];

я получаю вывод

* Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Не удалось загрузить NIB в комплекте: «NSBundle (еще не загружен)» с именем «ConfigViewController.xib»

Я пробовал как с .xib, так и без него.

Любые идеи?


person Erik    schedule 11.12.2012    source источник


Ответы (2)


Метод load используется для загрузки исполняемого кода, такого как фреймворки и тому подобное.
В вашем пакете нет исполняемого файла, который вы хотите загрузить, поэтому вам не нужно вызывать [bundle load].
Если имя пакета правильное, то все, что вы написали, кроме [bundle load], в порядке. В любом случае проверьте правильность пути, не слишком много инструкций:

NSString* path=[ [NSBundle mainBundle] pathForResource: @"Configuration" ofType: @"bundle"];

Если эта строка является правильным путем, то вы уверены, что пакет будет загружен правильно без вызова [bundle load].

person Ramy Al Zuhouri    schedule 11.12.2012
comment
Спасибо за этот комментарий, но это не решение моей проблемы. Все равно не загружается кисть :( - person Erik; 11.12.2012
comment
На данный момент имя пакета неверное, или он не находится внутри основного пакета. Вы его скопировали? - person Ramy Al Zuhouri; 11.12.2012
comment
Если я неправильно напишу имя пакета при его загрузке, NSBundle будет равен нулю. Так что это определенно что-то загружает - person Erik; 11.12.2012
comment
Вы правильно скопировали его в проекте? - person Ramy Al Zuhouri; 11.12.2012
comment
да, я вижу пакет и файлы xib в нем в моем проекте - person Erik; 11.12.2012
comment
И это дает мне путь NSLog(@file in bundle: %@, [bundle pathForResource:@ConfigViewController ofType:@xib]); в то время как NSLog(@файл в пакете: %@, [путь пакетаForResource:@AAAA ofType:@xib]); не дает мне путь - person Erik; 11.12.2012
comment
Попробуйте добавить /Contents/Resources между основным путем пакета и именем вашего пакета. Если он по-прежнему не работает, перейдите в свой пакет приложений (если у вас его нет, создайте архив) и точно посмотрите, где находится ваш пакет. - person Ramy Al Zuhouri; 12.12.2012

Прежде всего, если пакет не создан должным образом, он не будет загружен. Итак, чтобы создать правильный пакет, ниже приведены шаги для создания пакета:
1. Добавьте новую цель, выбрав шаблон с именем пакета в OS X -> Framework & Libraries.

  1. Выберите только что созданную цель и измените BaseSDK с OSX на последнюю версию iOS.

  2. Добавьте .xibs, изображения или другие ресурсы, которые вы хотите использовать, из пакета в Build Phrases -> Copy Bundle Resources.

  3. Добавьте фреймворк CoreFoundation в Build Phrases -> Связать двоичный файл с библиотеками.

  4. Скомпилируйте цель, выбрав iOS Device.

  5. Сохраните только что созданный пакет из каталога продуктов в какое-нибудь место.

Теперь скопируйте этот пакет в свой основной проект. Загрузите пакет, используя приведенный ниже код:

NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];

NSBundle *bundle = [NSBundle bundleWithPath:path];"

Теперь вы настроены на новый пакет.

person Dharmesh Siddhpura    schedule 28.03.2015