Не удалось загрузить NIB в комплекте

Я пытаюсь интегрировать Janrain Engage в качестве настраиваемого модуля с Appcelerator Titanium. Я создал образец модуля и перетащил папку JREngage в образец модуля xcodeproj, как указано в документации Jainrain.

Теперь я даю команду build для этого проекта, затем выполняю ./build.py, а затем, наконец, я выполняю команду titanium run. Он запускает приложение в симуляторе с пустым экраном и сразу же выдает ошибку, вызывая следующую ошибку.

Завершение приложения из-за неотображенного исключения "NSInternalInconsistencyException", причина: "Не удалось загрузить NIB в пакете:" NSBundle </Users/abhilash/Library/Application Support/iPhone Simulator/4.2/Applications/CA167346-4091-4E16- B841-955D1D391713/test.app > (загружен) 'с именем' JRProvidersController ''

Почему эта ошибка может возникнуть?

Ответ 1

Посетите свойства файлов .xib в инспекторе файлов, шаг "Целевое членство" в поле выбора, затем ваш xib файл был связан с вашей целевой

Ответ 2

В Targets → Build Phases

Убедитесь, что .xib добавлен в Copy Bundle Resources, если его нет, добавьте .xib файл.

Ответ 3

попытайтесь выяснить все

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

в вашем коде и убедитесь, что XXXController написано правильно

Ответ 4

У меня была та же проблема (исключение "Не удалось загрузить NIB в комплекте:.." ) после обновления моего xcode с 3.2 до 4.02. В то время как развертывание моего приложения с Xcode 3.2 работало нормально, он выходит из строя с xcode 4, создавая исключение, упомянутое выше, но только тогда, когда я попытался установить его на IOS Simulator (v.4.2). Ориентация устройства IOS (v.4.1) также действовала с помощью Xcode 4.

Оказалось (после частых отчаянных попыток скреститься), что причина была почти "скрытой" настройкой в ​​.xib файле:

Посетите свойства файлов .xib в инспекторе файлов: Свойство "Местоположение" было установлено как "Относительно группы" для всех .xib файлов. Я изменил его на "Относительно проекта" и вуаля: все .xib файлы теперь правильно загружен в симулятор IOS!

Я не знаю, что причина этого для этого нечетного поведения Xcode4, но, возможно, стоит попробовать?

Ответ 5

В моем случае это было очень странно (используйте раскадровку): По какой-то причине он изменился с "Main baseboard file name" на "Main nib file base name" в plist.

Возврат к основному имени основного файла основной раскладки (UIMainStoryboardFile) решил проблему

Ответ 6

ошибка означает, что нет .xib файла с именем "JRProvidersController". перепроверьте, существует ли JRProvidersController.xib.

вы загрузите .xib file с помощью

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

Ответ 7

Когда цель сборки является одним из моих устройств iOS, я щелкнул правой кнопкой мыши файл Product (xyzw.app) и выбрал всплывающее меню Show in Finder. Он открыл окно с xyzw.app внутри; Я открыл пакет с помощью Show Package Contents и увидел все файлы, которые я ожидал, за исключением одного файла, с которым он жаловался, с капиталом я вместо строчного я в имени (zoomieVIew.nib вместо zoomieView.nib). Я заметил прописную букву я в имени файла xib и изменил ее и перестроил; очевидно, Xcode оставил сгенерированное имя .nib таким, каким оно было. Я удалил zoomieVIew.nib в комплекте, перестроил и Xcode должным образом воссоздал файл как zoomieView.nib. Приложение начало работать на устройстве.

Ответ 8

Использование пользовательского представления Swift в контроллере представления Objective-C (да, даже после импорта файла <<PROJECT NAME>>-Swift.h) я попытался загрузить nib, используя:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... но NSStringFromClass([MyCustomView class]) возвращает <<PROJECT NAME>>.MyCustomView и сбой загрузки. TL; DR Все работало хорошо, загружая нить, используя строковый литерал:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

Ответ 9

У меня была эта проблема с раскадрой, и nib назывался что-то вроде "bKD-J3-fhr-view-ZSR-8m-2da".

Это было потому, что я пытался добавить subview в self.view в контроллере представления init (withCoder). Self.view еще не существует.

Переместил его в viewDidLoad и все лучше!

Ответ 10

Посмотрите на проект

Target -> Buid Phases -> Copy Bundle Resources

Вы найдете свой xib/storyborad с красным цветом.

Просто удалите его. Также удалите все ссылки отсутствующего файла из проекта.

Теперь перетащите этот файл раскадровки /xib еще раз на этот Copy Bundle Resources. Он все равно покажет вам файл с красным цветом, но не беспокойтесь об этом.

Просто очистите и создайте проект.

Теперь вы снова запустите свой проект!

Ответ 11

Я также обнаружил, что он не удался, когда я попытался загрузить XIB с именем, например @MyFile.xib. Когда я просто использовал @MyFile, он работал - видимо, он всегда добавляет расширение. Но сообщение об ошибке просто заявило, что не может найти MyFIle.xib в пакете - если бы он сказал MyFile.xib.xib, это было бы большой ключ.

Ответ 12

Работая над Xcode 4.6.3 и локализуя свои файлы NIB, я также сталкиваюсь с этой проблемой.

Для меня ничего больше не помогло, кроме изменения "Версии документа" в File Inspector для развертывания 5.0 вместо 6.1.

Ответ 13

Это происходит, когда вы переименовываете файл nib. Если у вас уже есть, создайте новый nib (то есть скопируйте текущее содержимое файла nib в новый nib), удалите старый файл nib и он решит вашу проблему.

Изменить: с новой стартовой версией Xcode 4.6.3, если вы переименуете (с функцией рефакторинга) класс контроллера, он также переименует файл nib, и вам не нужно беспокоиться о проблеме загрузки nib.

Ответ 14

У меня был интересный опыт использования Xcode 6.3.

Я тоже продолжал эту ошибку, несмотря на то, что вы, как правило, думали о правописании, целевом членстве и т.д., как это было предложено выше. Я также попытался очистить, удалить производные данные, а также удалить приложение из симулятора несколько раз, чтобы обеспечить правильное построение пакета, но безрезультатно.

Наконец, после ответа Брайана Майкла Бентли, я наконец решил проверить мой файл .app в моей папке симулятора на моем HD. Я обнаружил, что все мои перья были там, но с abc ~ ipad.nib вместо ожидаемого abc.nib. Я вручную переименовал все эти файлы, чтобы удалить часть ipad, созданную и сработала!

Попытка понять, почему они были добавлены с ключевым словом ~ ipad, я просмотрел параметры своего проекта, и на самом деле, на моей вкладке "Общие" > "Развертывание", я выбрал только iPad. Я пытался запустить симулятор iPhone. Я считаю, что в прошлом Xcode выдавал ошибку, указывающую на то, что двоичный файл не поддерживает iPhone, и вам не удастся запустить приложение.

Я удалил приложение из симулятора и сделал то же самое снова - снова с поддержкой только iPad. На этот раз .app содержал abc ~ iphone.nib AND abc ~ ipad.nib для каждого ожидаемого раскадровки, и он отлично работал на симуляторе iPhone. Опять же. Если мы выберем iPad только в наших настройках Info Info, он не должен запускаться на iPhone Simulator. Это ошибка Xcode.

Итак, существует некоторая непоследовательность поведения со стороны Xcode и, к сожалению, это прерывистая ошибка, и это может быть трудно воспроизвести, но я помещаю ее здесь, чтобы она могла помочь другим в будущем.

Ответ 15

Если бы эта же проблема ничего не работала, я понял что-то странное с производными данными.

В xcode 6.3.2 мне пришлось:

В меню XCode → Настройки → вкладка "Местоположения" → "Местоположения". Измените производные данные на "Относительно" и затем переключитесь на "По умолчанию"

Затем пинц загрузился нормально.

Ответ 16

Ваш XIB файл, вероятно, находится вне вашей папки проекта. Это приводит к тому, что не отображается целевой инспектор. Однако перемещение XIB файла в папку проекта должно быть исправлено.

Ответ 17

НЕ ПУТЬ .xib КОГДА ВЫ ВСТАВЛЯЕТЕ В ИМЯ XIB! ЭТО УЖЕ ПОДРАЗУМЕВАЕТСЯ!

Не делайте этого:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

Сделайте это:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];

Ответ 18

Swift4 пример, если ваши MyCustomView.swift и MyCustomView.xib в рамках. Поместите это в инициализацию MyCustomView:

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 

Ответ 19

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

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];

Ответ 20

Для раскадровки

Я перепробовал каждое решение, опубликованное здесь, но у меня ничего не получалось, так как я использую раскадровку со Swift 5.

Я только начал создавать новые контроллеры и представления в тестовом приложении раскадровки, но я обнаружил, что мне не хватает My View Controller Storyboard ID.

Итак, вот мое решение, если вы хотите перейти от ViewController A → View Controller B

Шаг 1. В раскадровке: просто убедитесь, что ваш ViewControllerA встроен в Navigation Controller

Шаг 2. В раскадровке: теперь проверьте , не упомянули ли вы Storyboard ID для вашего ViewControllerB, который вы будете использовать в коде в качестве идентификатора.

enter image description here

Шаг 3. и, наконец, убедитесь, что вы нажимаете контроллер таким образом в вашем ViewControllerA нажатием кнопки.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }

Ответ 21

Получил эту проблему при преобразовании моего старого кода из XCode 3x в XCode 4 и Решил его просто переименовать wwwwwwww.xib в RootViewController.xib

Ответ 22

Я столкнулся с той же проблемой. В моем случае имя nib было "MyViewController.xib", и я переименовал его в "MyView.xib". Это избавило от ошибки.

Я также перемещал проект с XCode 3 на 4.2. Изменение типа Path не имело значения.

Ответ 23

Также причиной может быть поиск файла в неподходящей языковой папке, когда вы перепутали локализацию.

Ответ 24

Каждый раз, когда я реорганизую имя контроллера представления, которое в моем приложении appDelegate трачу время на это. Рефакторинг не изменяет имя nib в initWithNibName: @ "MYOldViewControllerName".

Ответ 25

У меня была одна и та же проблема, для меня работала переименование идентификатора контроллера вида в раскадровке.

Ответ 26

Я заметил, что это может произойти, если вы переключаетесь между ветвями в git и забываете сделать чистым. Итак, xib есть и все находит, но точная сборка может иметь проблемы. Так что на всякий случай не забудьте сделать чистый

Ответ 27

SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

В приведенном выше коде, если вы также даете расширение файла, например "SecondView.xib", тогда оно ошибочно и даст вам ошибку выше. Вместо этого используйте "SecondView". Я допустил эту ошибку.

Ответ 28

Это сработало для меня.. Убедитесь, что вы правильно набрали имя nib.

[[NSBundle mainBundle] loadNibNamed: @Владелец "Graphview": собственные параметры: nil];

Graphview (имя ниба)

Ответ 29

У меня та же проблема, и мой файл .xib уже был связан с Target Membership в проекте. Затем я снял флажок для файла цели и снова проверил, затем Clean и Build проект. Интересно, это сработало для меня.

Ответ 30

Будьте осторожны: Xcode чувствителен к регистру с именами файлов. Это не то же самое "Веселье", как "Веселье".