Не удалось найти раскадровку с именем 'MainStoryBoard' в bundle NSBundle

Я начал новое приложение несколько дней назад и начал работать на симуляторе, чтобы проверить его. Я начал как пустой проект и вручную добавил раскадровку. Тренажер создает и запускает мое приложение просто отлично, но когда я пытаюсь построить на моем iPhone, я получаю сообщение 'не удалось найти раскадровку с именем "MainStoryBoard" в bundle NSBundle'.

Google ничего не обнаружил и этот вопрос предложил я проверил свою цель для раскадровки, но все быть на месте. Тем не менее, если бы что-то не было на месте, симулятор тоже не работал бы.

может ли кто-нибудь указать мне в правильном направлении?

26 ответов


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


У меня было приложение, работающее нормально на симуляторе iPhone, но странно Xcode перестал отвечать, и мне пришлось заставить выйти из Xcode. Когда я перезапустил Xcode, я столкнулся "не удалось найти раскадровку с именем MainStoryboard....",

я исправил эту проблему, выполнив следующие шаги:

  1. Переименование "MainStoryboard.раскадровка "to" MainStoryboard_1.раскадровка"
  2. открыть файл " $your_app$ - Info.plist "находится в папке" Supporting Files". Редактировать " Main имя базы файлов раскадровки "to" MainStoryboard_1.раскадровка."
  3. повторите приложение, и оно сработало для меня.
  4. я переименовал файл раскадровки обратно в исходную " MainStoryboard.раскадровка."
  5. редактировать .файл plist возвращается к оригиналу.
  6. повторите приложение, и оно сработало для меня.

Почему-то файл "MainStoryboard.раскадровка " не была распознана после принудительного выхода из Xcode и следующих шагов, сделанных приложением файл снова.

надеюсь, это решение поможет..


просто хочу упомянуть сценарий, с которым я столкнулся. Я не знаю, как, но раскадровка отключена от цели, хотя она все еще была частью проекта. Чтобы исправить это, я открыл раскадровку, выбрал " инспектор файлов "(самый левый значок на правой панели) и проверил проект в разделе"целевое членство". Надеюсь, это кому-то поможет.


проблема возникает, когда вы отменяете выбор "использовать базовую интернационализацию" и запускаете симулятор в другой локали, а не в вашей конкретной локализации.

например, вы указываете локализацию zh-CN в настройках проекта, но запускаете симулятор под en-US.


пробовал все решения, упомянутые выше, но не работал.

после тщательного исследования нашли виновника:

ресурс Copy Bundle отсутствовал в TARGETS - > Build Phases

Это было случайно удалено при удалении Cocoapods.

Ниже приведены шаги, чтобы исправить это :

  1. на TARGETS проекта
  2. нажать на кнопку plus (+) button присутствует в левом верхнем углу
  3. Выберите Создать Копию Bundle ресурсы из выпадающего
  4. теперь добавьте вы Storyboard files (Main, Launchscreen etc). также добавьте папку Assets. Вы можете добавить эти файлы, нажав на кнопку плюс ( + ) присутствует в нижней части

screenshot

  1. удалить derived data content
  2. Delete the app из симулятора / устройства и запустите снова

Я думал, что вы, возможно, удалили раскадровку и решили использовать .xib файл при первоначальном запуске приложения. В этом случае Xcode попытается найти несуществующую раскадровку.

для этого случая нажмите на проект > Info>Custom iOS Target Properties и удалите эту пару значений ключа: Main storyboard file base name


это помогло мне (Swift 2.1, Xcode 7.2) для приложения с панелью вкладок

    let storyboard: UIStoryboard = UIStoryboard(name:"Main",bundle: NSBundle(forClass: self.dynamicType))
    let tabController = storyboard.instantiateViewControllerWithIdentifier("MyTabBarIdentifier") as! UITabBarController

У меня был основной.раскадровка с правильным целевым членством, копирование ресурсов пакета, очищенная папка сборки и т. д. (Большинство ответов указывали на это).


простая очистка исправила ошибку для меня.


Нитин Alaburответ помог мне, но косвенно. Публикация другого ответа для уточнения:

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

мой код выглядел так:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];

я игнорировал NSBundle вещи, потому что, эй, я не знаю, что такое пакет. Оказывается, это важно для этого случая использования, где раскадровка будет существовать вне "пакета" приложения (вместо этого он находится в пакете my framework). Этот код скажет iOS найти раскадровку в пакете, в котором существует текущий класс (который для меня является пакетом, содержащим мою структуру):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];

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

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


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

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

часто люди будут вводить " Main.раскадровка " для имени, так как это буквально имя файла, но для целей кодирования Obj-C "X. раскадровка" имеет имя "X", поэтому в этом случае @"Main".


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


У меня была эта проблема, когда я случайно открыл проект со второй установкой Xcode. Он сломал мои файлы проекта навсегда (что понятно).


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

перейти к цели - > info, выберите info, скопируйте имя раскадровки и вставьте его туда, где вы вызываете раскадровку.

по крайней мере, попробуйте....


Это произошло со мной, когда у меня было предыдущее приложение с тем же именем, установленным на симуляторе.

Я удалил предыдущее приложение, повторно выбрал раскадровку на "Информация о развертывании", повторно запустил приложение, и все работало нормально.


вам просто нужно проверить файл конфигурации (.plist) под Supporting files папку

Проверьте имя раскадровки по умолчанию.


У меня также была такая же проблема, что вызвало этот тип исключения, я написал "Main.раскадровка "вместо " Главная". Нам не нужно уточнять .раскадровка расширение.


У меня была аналогичная проблема, и я получал следующую ошибку.

exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'MainStoryboard_iPhone' in bundle NSBundle

я исправил это, обновив файл plist. Просто перейти редактировать - >найти - >найти в рабочей области и поиск "история". Теперь обновите соответствующее название для раскадровки.


Если вы недавно сбросили настройки iOS sim по умолчанию, также полезно проверить настройки локали в настройках. Я работаю над приложением с русским языком в качестве единственного языка, и после сброса sim-карты xCode остановился, чтобы запустить приложение, потому что язык sim был установлен на английский.


У меня была эта ошибка на устройстве, когда я добавил около 150 шрифтов UIAppFonts.
После того, как я сократил их количество до 100, он ушел.


У меня была эта проблема в проекте, который имел раскадровки с и без ~iPad или ~iPhone суффиксов, таких как MainStoryboard.раскадровка и MainStoryboard~iPad.раскадровка.

проблема заключалась в том, что MainStoryboard.раскадровка была перезаписана MainStoryboard~iPad.раскадровка, когда она была скомпилирована в каталог сборки. Если файлы были скомпилированы в обратном порядке, оба будут сохранены без проблем. Я понятия не имею, почему это происходит.

чтобы обойти это, вы можете прекратите использовать суффиксы ~iPad/iPhone или убедитесь, что файлы находятся в правильном порядке на этапе копирования ресурсов пакета.

(Используя XCode6.2beta2)


очень глупый, но у меня была " MainStoryboard.раскадровка " in the " основное базовое имя файла раскадровки (iPad)" запись my my .plist вместо просто "MainStoryboard".


решение для меня было в том, что мне просто нужно было добавить MainStoryboard в Bundle Resources. После этого он работает нормально.

проект - > этапы сборки - > копировать ресурсы пакета - > нажмите на + кнопка и добавить файл.


перейти к вашей информации.plist на этапах сборки > скопируйте ресурсы пакета и добавьте раскадровку, используя значок"+"


в моем случае это была раскадровка внутри фреймворка для приложения Mac. Я использовал:

let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)

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

let storyboard = NSStoryboard(name: "StoryboardName",
                            bundle: Bundle(identifier: "com.company.FrameworkName"))

есть 2 возможности,

  1. убедитесь, что раскадровка добавлена к вашей цели.

Select Storyboard > Go to file inspector (first right tab) > Check Target Membership

enter image description here

  1. инициализировать раскадровку с помощью proper bundle.

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

      let bundle = Bundle(for: MyClass.self)
      let storyboard = UIStoryboard(name: "Main", bundle: bundle)