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

Я пытаюсь протестировать приложение, которое я разрабатываю на своем iPhone. Для этого я сменил цель с Simulator на Device на Xcode. Приложение правильно загружено на устройство, и оно работает. Отобразится основное представление, но если я попытаюсь открыть вторичный вид, приложение выйдет из строя.

В журнале iPhone (я установил утилиту конфигурации iPhone, чтобы увидеть консоль [это единственный способ увидеть журнал с iPhone?]). Я вижу эту ошибку:

Could not load NIB in bundle

Но на симуляторе он работает отлично. Что не так? Любые идеи?

Ответ 1

Я обнаружил, что иногда устройство чувствительно к регистру, а симулятор - нет.

Какое имя файла вашего xib?


или

Попробуйте удалить приложение из симулятора и снова установить его - у симулятора может быть старый файл, оставшийся после предыдущего запуска приложения - вы вообще переименовали/перенесли xib во время разработки?

Ответ 2

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

  • Открыть цель XCode
  • Перейдите на вкладку "Фазы сборки"
  • Нажмите раздел "Копировать ресурсы пакета"
  • Нажмите кнопку +
  • Добавьте отсутствующий файл Nib

Ответ 3

У меня была аналогичная проблема, и я получал ту же ошибку. Оказывается, я использовал полное имя xib файла на панели атрибутов в разделе "NIB Name:"

Не используйте "SomeViewController.xib", просто используйте "SomeViewController" без расширения ".xib".

Ответ 4

У меня была такая же проблема при вызове initWithNibName:@"MyViewController"

Смена вызова на initWithNibName:NSStringFromClass([MyViewController class]) хорошо работала

Ответ 5

Вы можете попробовать следующее:

  • Убедитесь, что дело правильное.
  • Использовать имя файла xib без расширения .xib.
  • Удалите любые (тире) или другие специальные символы, используйте _ (подчеркивание)
  • Удалите файл xib из проекта и добавьте обратно в проект Xcode
  • Проверьте настройки сборки и убедитесь, что развертывание изменено для коррекции SDK

Ответ 6

В моем случае xib просто не копировался в связку. Как только я добавил xib в "Copy Bundle Resources" для целевого приложения, все прошло нормально.

Ответ 7

Мне удалось решить эту проблему с помощью этих двух шагов:

  • В диспетчере файлов контроллера просмотра удалите любую локализацию (только для тестирования)
  • Убедитесь, что вы проверили правильное целевое членство.

Я не знаю, почему он работает на симуляторе: (

Ответ 8

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

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

Ответ 9

У меня было такое же сообщение об ошибке. Моя проблема, однако, заключалась в том, что мои настройки языка на моем телефоне были установлены на "английском языке" и в регионе "Соединенное Королевство". Однако файл, который нельзя загрузить, был помещен в каталог de.lproj. Перемещение файла в корневую директорию разрешило его.

Ответ 10

Для меня проблема была именно в том, что сказал FreeAsInBeer: ник почему-то не пропал из комплекта, тогда как он был там раньше и правильно работал в предыдущих версиях приложения.

Чтобы устранить проблему, я сделал следующее:

  • Выберите проект в Навигаторе проектов.
  • В настройках проекта выберите Фазы сборки.
  • Развернуть Ресурсы копирования ресурсов.
  • Прокрутите вниз (при необходимости) и нажмите кнопку +.
  • В появившемся диалоговом окне нажмите кнопку Добавить другое....
  • Найдите отсутствующий файл .XIB в файловой системе.
  • Сборка и запуск... при запуске должен появиться отсутствующий значок.

Это то, что сработало для меня, когда я получил это сообщение. Ваш пробег может отличаться, поскольку обстоятельства не всегда одинаковы для всех, но я надеюсь, что это поможет кому-то, кто сталкивается с этой проблемой.

-Evan

Ответ 11

Простая ошибка, которая может вызвать эту ошибку, - это попытка initWithNibName на импортированном viewController, когда вы используете раскадровку, а не отдельные файлы Nib. Если это так, тогда просто запустите контроллер вместо того, чтобы пытаться инициализировать с помощью ниба, который не существует, или запустите эти поля с помощью nil.

Если Storyboard и no nib, измените initWithNibName: bundle: просто init или initWithNibName: nil bundle: nil

Ответ 12

Для чего это стоит, я получил эту ошибку, когда у одной из кнопок панели вкладок был присвоен неправильный класс.

Ответ 13

Мне нужно запустить его с удалением всей локализации из xib В правом окне. Возможно, файл находится в папке локализации.

Ответ 14

У меня та же проблема. И мое решение - удалить все локализации для представления.

Ответ 15

У меня было точно такое поведение, которое вы описали: работает на симуляторе, но при запуске на устройстве загружается "Невозможно загрузить NIB в комплекте", и приложение остается застреленным на снимке запуска.

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

Поскольку мне не нужно было локализовать этот файл (он по умолчанию стал Xcode для его локализации), я устранил проблему, просто удалив английскую локализацию, поэтому тот же файл используется независимо от локализации. Другой способ устранить проблему - добавить недостающую локализованную версию, если вам это нужно.

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

Ответ 16

У меня также была эта проблема, когда я загрузил контроллер дочернего представления из initWithCoder, что является хорошим местом для инициализации, но имейте в виду, что вы должны добавить его как фактический дочерний элемент ПОСЛЕ загрузки представления.

Итак, сдвиньте что-то вроде этого:

[self addChildViewController: self.pageViewController];
[self.view addSubview: self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];

... из вашего метода init и в viewDidLoad. Не говорите, что это ваша проблема, в частности, но это может быть полезно для других.