Ответ 1
Посетите свойства файлов .xib в инспекторе файлов, шаг "Целевое членство" в поле выбора, затем ваш xib файл был связан с вашей целевой
Я пытаюсь интегрировать 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 ''
Почему эта ошибка может возникнуть?
Посетите свойства файлов .xib в инспекторе файлов, шаг "Целевое членство" в поле выбора, затем ваш xib файл был связан с вашей целевой
В Targets → Build Phases
Убедитесь, что .xib добавлен в Copy Bundle Resources
, если его нет, добавьте .xib файл.
попытайтесь выяснить все
XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];
в вашем коде и убедитесь, что XXXController
написано правильно
У меня была та же проблема (исключение "Не удалось загрузить 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, но, возможно, стоит попробовать?
В моем случае это было очень странно (используйте раскадровку): По какой-то причине он изменился с "Main baseboard file name" на "Main nib file base name" в plist.
Возврат к основному имени основного файла основной раскладки (UIMainStoryboardFile) решил проблему
ошибка означает, что нет .xib файла с именем "JRProvidersController"
.
перепроверьте, существует ли JRProvidersController.xib
.
вы загрузите .xib file
с помощью
controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Когда цель сборки является одним из моих устройств iOS, я щелкнул правой кнопкой мыши файл Product (xyzw.app) и выбрал всплывающее меню Show in Finder. Он открыл окно с xyzw.app внутри; Я открыл пакет с помощью Show Package Contents и увидел все файлы, которые я ожидал, за исключением одного файла, с которым он жаловался, с капиталом я вместо строчного я в имени (zoomieVIew.nib вместо zoomieView.nib). Я заметил прописную букву я в имени файла xib и изменил ее и перестроил; очевидно, Xcode оставил сгенерированное имя .nib таким, каким оно было. Я удалил zoomieVIew.nib в комплекте, перестроил и Xcode должным образом воссоздал файл как zoomieView.nib. Приложение начало работать на устройстве.
Использование пользовательского представления 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];
У меня была эта проблема с раскадрой, и nib назывался что-то вроде "bKD-J3-fhr-view-ZSR-8m-2da".
Это было потому, что я пытался добавить subview в self.view в контроллере представления init (withCoder). Self.view еще не существует.
Переместил его в viewDidLoad и все лучше!
Посмотрите на проект
Target -> Buid Phases -> Copy Bundle Resources
Вы найдете свой xib/storyborad с красным цветом.
Просто удалите его. Также удалите все ссылки отсутствующего файла из проекта.
Теперь перетащите этот файл раскадровки /xib еще раз на этот Copy Bundle Resources
. Он все равно покажет вам файл с красным цветом, но не беспокойтесь об этом.
Просто очистите и создайте проект.
Теперь вы снова запустите свой проект!
Я также обнаружил, что он не удался, когда я попытался загрузить XIB с именем, например @MyFile.xib. Когда я просто использовал @MyFile, он работал - видимо, он всегда добавляет расширение. Но сообщение об ошибке просто заявило, что не может найти MyFIle.xib в пакете - если бы он сказал MyFile.xib.xib, это было бы большой ключ.
Работая над Xcode 4.6.3 и локализуя свои файлы NIB, я также сталкиваюсь с этой проблемой.
Для меня ничего больше не помогло, кроме изменения "Версии документа" в File Inspector для развертывания 5.0 вместо 6.1.
Это происходит, когда вы переименовываете файл nib. Если у вас уже есть, создайте новый nib (то есть скопируйте текущее содержимое файла nib в новый nib), удалите старый файл nib и он решит вашу проблему.
Изменить: с новой стартовой версией Xcode 4.6.3, если вы переименуете (с функцией рефакторинга) класс контроллера, он также переименует файл nib, и вам не нужно беспокоиться о проблеме загрузки nib.
У меня был интересный опыт использования 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 и, к сожалению, это прерывистая ошибка, и это может быть трудно воспроизвести, но я помещаю ее здесь, чтобы она могла помочь другим в будущем.
Если бы эта же проблема ничего не работала, я понял что-то странное с производными данными.
В xcode 6.3.2 мне пришлось:
В меню XCode → Настройки → вкладка "Местоположения" → "Местоположения". Измените производные данные на "Относительно" и затем переключитесь на "По умолчанию"
Затем пинц загрузился нормально.
Ваш XIB файл, вероятно, находится вне вашей папки проекта. Это приводит к тому, что не отображается целевой инспектор. Однако перемещение XIB файла в папку проекта должно быть исправлено.
НЕ ПУТЬ .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];
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
}
Если вы используете фреймворки в своем проекте, вам нужно убедиться, что вы загружаетесь из правильного пакета:
NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];
Для раскадровки
Я перепробовал каждое решение, опубликованное здесь, но у меня ничего не получалось, так как я использую раскадровку со Swift 5.
Я только начал создавать новые контроллеры и представления в тестовом приложении раскадровки, но я обнаружил, что мне не хватает My View Controller Storyboard ID.
Итак, вот мое решение, если вы хотите перейти от ViewController A → View Controller B
Шаг 1. В раскадровке: просто убедитесь, что ваш ViewControllerA встроен в Navigation Controller
Шаг 2. В раскадровке: теперь проверьте , не упомянули ли вы Storyboard ID для вашего ViewControllerB, который вы будете использовать в коде в качестве идентификатора.
Шаг 3. и, наконец, убедитесь, что вы нажимаете контроллер таким образом в вашем ViewControllerA нажатием кнопки.
if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {
if let navigator = navigationController {
navigator.pushViewController(viewControllerB, animated: true)
}
}
Получил эту проблему при преобразовании моего старого кода из XCode 3x в XCode 4 и Решил его просто переименовать wwwwwwww.xib в RootViewController.xib
Я столкнулся с той же проблемой. В моем случае имя nib было "MyViewController.xib", и я переименовал его в "MyView.xib". Это избавило от ошибки.
Я также перемещал проект с XCode 3 на 4.2. Изменение типа Path не имело значения.
Также причиной может быть поиск файла в неподходящей языковой папке, когда вы перепутали локализацию.
Каждый раз, когда я реорганизую имя контроллера представления, которое в моем приложении appDelegate трачу время на это. Рефакторинг не изменяет имя nib в initWithNibName: @ "MYOldViewControllerName".
У меня была одна и та же проблема, для меня работала переименование идентификатора контроллера вида в раскадровке.
Я заметил, что это может произойти, если вы переключаетесь между ветвями в git и забываете сделать чистым. Итак, xib есть и все находит, но точная сборка может иметь проблемы. Так что на всякий случай не забудьте сделать чистый
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
[self.navigationController pushViewController:secondViewController animated:YES];
В приведенном выше коде, если вы также даете расширение файла, например "SecondView.xib", тогда оно ошибочно и даст вам ошибку выше. Вместо этого используйте "SecondView". Я допустил эту ошибку.
Это сработало для меня.. Убедитесь, что вы правильно набрали имя nib.
[[NSBundle mainBundle] loadNibNamed: @Владелец "Graphview": собственные параметры: nil];
Graphview (имя ниба)
У меня та же проблема, и мой файл .xib
уже был связан с Target Membership
в проекте. Затем я снял флажок для файла цели и снова проверил, затем Clean
и Build
проект. Интересно, это сработало для меня.
Будьте осторожны: Xcode чувствителен к регистру с именами файлов. Это не то же самое "Веселье", как "Веселье".