Подтвердить что ты не робот

Не удалось найти раскадровку под названием "MainStoryBoard" в комплекте NSBundle

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

  • Переименование "MainStoryboard.storyboard" на "MainStoryboard_1.storyboard"
  • Откройте файл "$ your_app $-Info.plist", расположенный в папке "Поддерживаемые файлы". Измените "Основное имя основного файла раскадровки" на "MainStoryboard_1.storyboard".
  • Перезапустите приложение, и это сработало для меня.
  • Я переименовал свой файл раскадровки в свою оригинальную "MainStoryboard.storyboard" .
  • Отредактирован файл .plist до его оригинала.
  • Перезапустите приложение, и это сработало для меня.

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

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

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

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

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

Ответ 9

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

После тщательного исследования выяснилось, что виновник:

Скопируйте пакетный ресурс в TARGETS → Фазы сборки

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

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

  • Перейдите к TARGETS вашего проекта
  • Нажмите plus (+) button в верхнем левом углу
  • В раскрывающемся списке выберите "Ресурсы исходного копирования".
  • Теперь добавьте вас Storyboard files (Main, Launchscreen etc). Также добавьте папку "Активы". Вы можете добавить эти файлы, нажав на кнопку плюс (+) внизу внизу

screenshot

  1. Удалить derived data content
  2. Delete the app из Simulator/Device и снова запустите

Ответ 10

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

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

Ответ 11

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

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

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

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

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

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

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

Ответ 18

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

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

Я исправил его, обновив файл plist. Просто перейдите в Edit- > Find- > Find in Workspace и найдите "story". Теперь обновите соответствующее имя для панели рассказов.

Ответ 19

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

Ответ 20

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

Ответ 21

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

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

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

(с использованием XCode6.2beta2)

Ответ 22

Очень глупо, но у меня была "MainStoryboard.storyboard" в записи "Main baseboard file name (IPad)" основного моего файла .plist вместо "MainStoryboard".

Ответ 23

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

Project → Build Phases → Copy Bundle Resources → нажмите кнопку + и добавьте файл.

Ответ 24

Перейдите в свой info.plist на странице "Сборка фаз" > "Скопировать ресурсы пакета" и добавьте раскадровку с помощью значка "+"

Ответ 25

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

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

и необходимо использовать идентификатор пакета framework для получения правильного пакета:

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

Ответ 26

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

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

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

введите описание изображения здесь

  1. Инициализируйте раскадровку с правильным bundle.

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

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