Не удалось найти раскадровку с именем 'MainStoryBoard' в bundle NSBundle
Я начал новое приложение несколько дней назад и начал работать на симуляторе, чтобы проверить его. Я начал как пустой проект и вручную добавил раскадровку. Тренажер создает и запускает мое приложение просто отлично, но когда я пытаюсь построить на моем iPhone, я получаю сообщение 'не удалось найти раскадровку с именем "MainStoryBoard" в bundle NSBundle'.
Google ничего не обнаружил и этот вопрос предложил я проверил свою цель для раскадровки, но все быть на месте. Тем не менее, если бы что-то не было на месте, симулятор тоже не работал бы.
может ли кто-нибудь указать мне в правильном направлении?
26 ответов
симулятор не чувствителен к регистру, но устройство. Если раскадровка называется MainStoryboard, а не MainStoryBoard, это вызовет вашу проблему.
У меня было приложение, работающее нормально на симуляторе iPhone, но странно Xcode перестал отвечать, и мне пришлось заставить выйти из Xcode. Когда я перезапустил Xcode, я столкнулся "не удалось найти раскадровку с именем MainStoryboard....",
я исправил эту проблему, выполнив следующие шаги:
- Переименование "MainStoryboard.раскадровка "to" MainStoryboard_1.раскадровка"
- открыть файл " $your_app$ - Info.plist "находится в папке" Supporting Files". Редактировать " Main имя базы файлов раскадровки "to" MainStoryboard_1.раскадровка."
- повторите приложение, и оно сработало для меня.
- я переименовал файл раскадровки обратно в исходную " MainStoryboard.раскадровка."
- редактировать .файл plist возвращается к оригиналу.
- повторите приложение, и оно сработало для меня.
Почему-то файл "MainStoryboard.раскадровка " не была распознана после принудительного выхода из Xcode и следующих шагов, сделанных приложением файл снова.
надеюсь, это решение поможет..
просто хочу упомянуть сценарий, с которым я столкнулся. Я не знаю, как, но раскадровка отключена от цели, хотя она все еще была частью проекта. Чтобы исправить это, я открыл раскадровку, выбрал " инспектор файлов "(самый левый значок на правой панели) и проверил проект в разделе"целевое членство". Надеюсь, это кому-то поможет.
проблема возникает, когда вы отменяете выбор "использовать базовую интернационализацию" и запускаете симулятор в другой локали, а не в вашей конкретной локализации.
например, вы указываете локализацию zh-CN в настройках проекта, но запускаете симулятор под en-US.
пробовал все решения, упомянутые выше, но не работал.
после тщательного исследования нашли виновника:
ресурс Copy Bundle отсутствовал в TARGETS - > Build Phases
Это было случайно удалено при удалении Cocoapods.
Ниже приведены шаги, чтобы исправить это :
- на
TARGETS
проекта - нажать на кнопку
plus (+) button
присутствует в левом верхнем углу - Выберите Создать Копию Bundle ресурсы из выпадающего
- теперь добавьте вы
Storyboard files (Main, Launchscreen etc).
также добавьте папку Assets. Вы можете добавить эти файлы, нажав на кнопку плюс ( + ) присутствует в нижней части
- удалить
derived data content
-
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 возможности,
- убедитесь, что раскадровка добавлена к вашей цели.
Select Storyboard > Go to file inspector (first right tab) > Check Target Membership
-
инициализировать раскадровку с помощью proper
bundle
.- если раскадровка находится в той же цели, над которой вы работаете, используйте
bundle = nil
-
если раскадровка находится в другой цели, чем вы работаете, то попробуйте следующий код для инициализации набор и раскадровки.
let bundle = Bundle(for: MyClass.self) let storyboard = UIStoryboard(name: "Main", bundle: bundle)
- если раскадровка находится в той же цели, над которой вы работаете, используйте