Не удалось найти раскадровку с именем "Основная" в наборе


86

У меня странная ошибка: 'Could not find a storyboard named 'Main' in bundle NSBundle'при попытке запустить приложение на реальном устройстве iOS.

У меня есть файл в моем каталоге, и он отлично работает в симуляторе. Однако в Copy Bundle Resourcesразделе файл Main.storyboardкрасный.

Я попытался удалить его и добавить снова, перезапустить Xcode, очистить сборку и т.д., но безрезультатно. Это предупреждение, которое я получаю в Xcode:

/Users/ajay/Documents/avx/avx/Base.lproj/Main.storyboard: Internationalization of /Users/ajay/Documents/avx/avx/Base.lproj/Main.storyboard is not available when compiling for targets before iOS 6.0

Я описал, как решить проблему в этом посте: stackoverflow.com/a/21098195/1141395
Alex Cio

Эта проблема в основном возникает из-за поврежденной установки приложения. Решение - очистить и построить проект. Также удалите существующее приложение с устройства / симулятора и снова запустите.
Кришнабхадра

Пользователи Xcode 11 , прокрутите вниз до stackoverflow.com/a/58452686 , возможно, это именно ваш случай.
Цемен

Ответы:


92

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

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


24
Спасибо, но мое приложение запустилось с черным экраном. Но вылетов нет.
Carpetfizz

Убедитесь, что в вашем - (BOOL) приложении есть две следующие строки: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions ...: (1) self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] границы]]; (2) self.window.backgroundColor = [UIColor whiteColor];
Джоэл Хансен

@ Carpetfizz Добавить '[self.window makeKeyAndVisible];' в ваш AppDelegate.
Alserda

4
"запуск приложения с черным экраном", никто об этом не догадывается?
Умит Кая

@Umitk установил белый фон (view.backgroundColor = .white) или любой другой цвет, который вам нравится
Стефан Паке

59

Вы можете проверить целевое членство раскадровки. Может быть, в этом проблема:

Это должно выглядеть так:

Целевое членство


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

2
Спасибо, сработало! Я сделал Clean, Rename File, Update Plist без радости. Всегда самое очевидное, что тебя заводит.
Джим Гельдерманн,

Привет, у меня такая же проблема, но окно целевого членства не отображается, Xcode 7. Пожалуйста, помогите
DrPatience

По какой-то причине моя цель не была выбрана .. Спасибо за ответ .. Решено !!
Ümañg ßürmån

58

Для тех, кто сталкивается с этой проблемой в Xcode 11, вот как вы ее исправите, если вы столкнетесь с этой проблемой при настройке проекта без раскадровки.

(Добавление некоторых частей, которые пропустил рикардоперейра )

1) Сначала удалите файл Main.storyboard

2) Затем перейдите в PROJECT_NAME -> GENERAL

В раскрывающемся списке основного интерфейса удалите текст Main

удаление ссылки на главное из общих настроек

3) Теперь перейдите в info.plist и удалите имя раскадровки.

удаление ссылки на раскадровку из info.plist

4) Наконец, измените код сцены (_: willConnectTo: options) в файле SceneDelegate.swift (да, его больше нет в App Delegate.)

var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }

Вместо этого вы также можете обратиться к этому видео: https://www.youtube.com/watch?v=Htn4h51BQsk


3
Ваш ответ почти правильный, только есть небольшое изменение в функции сцены: guard let _ = (scene as? UIWindowScene) else { return } let viewController = ViewController() if let windowScene = scene as? UIWindowScene { self.window = UIWindow(windowScene: windowScene) self.window?.rootViewController = viewController self.window?.makeKeyAndVisible() }
Реза Дехнави

3
Чтобы добавить некоторого акцента, запись info.plist - это не просто обычная основная запись раскадровки, но ТАКЖЕ одна в манифесте сцены приложения, которая является новой для iOS 13. Мне пришлось прочитать дважды, прежде чем я понял.
jboulter11

Это правильный путь сейчас! ^^ Apple постоянно меняла вещи.
Yuchen Zhong

36

Обновление для приложений, созданных для iOS 13.0 и выше. (Xcode 11)

Если вы получаете сообщение об ошибке «Не удалось найти раскадровку с именем« Основная »в пакете даже после изменения« Базовое имя основного файла раскадровки »в info.plist и« Основной интерфейс »в разделе« Развертывание в целевом объекте ».

Затем вам нужно изменить другую запись в файле info.plist.

  1. Откройте файл info.plist.
  2. Разверните «Манифест сцены приложения».
  3. Разверните «Конфигурация сцены».
  4. Разверните элемент 0 в разделе «Роль сеансов приложения», а затем измените имя раскадровки.

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

И ваше приложение заработает.


1
Это абсолютно правильный ответ. Очевидно, уже недостаточно установить основную раскадровку из раскрывающегося списка General> Main Interface.
NRitH

1
Спасибо за это. Удаление ключа «Application Scene Manifest» (вместе со всеми его подключами) решило проблему для меня.
Грег Браун,

1
Я честно не знаю, что произошло, но это работает
Баванта

1
Ты спас мне жизнь :)
Юсуф Камиль АК

17

В проекте, который используется UISceneв iOS 13 и Xcode 11, вам необходимо удалить UISceneStoryboardFileключ из .plist.

Xcode 11:

xcode11-uiscene

Переход прямо из файла:

uiscene-plist


15

Я удалил приложение со своего телефона, сделал Продукт -> Очистить и снова загрузил его. Это все, что мне потребовалось.


для каждого выполнения, если удаляет, то только он выполняет меня ... пожалуйста, помогите мне в xcode 10.1
Аруна М

12

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

Удаление ключа "Основное имя файла раскадровки" из моего списка устранило ошибку.


10

Не удалось найти раскадровку с именем "Основная" в наборе

Причина, о которой я мог думать:

Насколько я понял из моих знаний iOS, это произошло только потому, что XCode не смог найти ссылку на файл Main.storyboard в моем каталоге проекта, чтобы скопировать его в приложение.

Разрешение:

  1. Выбрал файл Main.storyboard и попытался удалить, а в появившемся диалоговом окне: введите описание изображения здесь

  2. Нажмите кнопку «Удалить ссылку».

  3. Затем из фактического места, где я мог найти файл Main.storyboard в каталоге проекта, перетащить его и оставить в XCode, и снова из диалогового окна, которое появляется следующим образом: введите описание изображения здесь

  4. Я выбрал «Создать ссылки на папки» (потому что это единственное, что я намеревался сделать, потому что я изменил структуру файлов и папок моего проекта). Но в большинстве случаев выбор «Создать группы» также может сработать. И нажал кнопку «Готово». Мои файлы раскадровки уже были внутри, как показано на скриншоте, уже в Base.lprojкаталоге, как показано ниже:

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

    Примечание. На этом этапе необходимо напомнить одну важную вещь : не забудьте поставить галочку в поле «Добавить в цели» в вашем приложении.

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

Надеюсь, это может быть полезно кому-то еще! Я пробовал это на XCode 7.3.1 и на iOS Sim 9.3 и iPhone 6S!


Пожалуйста, помогите мне, я тоже столкнулся с этой проблемой после установки os10.14.1 и xc0de 10.1..am пытается решить через 3 дня, но все же ... мой проект хорошо работает в xcode9.1 ..
Aruna M

@ArunaM Вы пробовали выполнить описанные выше шаги, которые я дал в ответе? Каков был статус после этого?
Randika Vishman

1
Это было решение, когда я удалил ViewController из проекта, что вызвало ту же ошибку!
Сларти Бартфаст,

8

Следуйте шагам:

1) Сначала щелкните свою раскадровку

2) Затем нажмите File Inspector.

3) Затем выберите «Целевое членство».

Снимок экрана


6

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

main.storyboard -> только main - это имя раскадровки


6

Swift 5.1 и xCode 11.2

В моем случае, я забыл изменить Storyboard NameвInfo.plist

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

Info.plist исходный код

    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <false/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                    <key>UISceneStoryboardFile</key>
                    <string>AccountViewController</string>
                </dict>
            </array>
        </dict>
    </dict>

4
  1. Откройте файл раскадровки
  2. Затем нажмите File Inspector
  3. Затем выберите «Целевое членство» и проверьте свой проект.
  4. Сделайте то же самое для файла ViewController !!! Важная часть, если вы используете ViewController.swift или ViewController.m с раскадровкой !!!

3

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

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

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


2

Два разных решения, которые сработали для меня после обновления до Xcode 10.1:

  • В File-> Workspace (or Project) Settings . Переключитесь на устаревшую систему сборки .

  • На целевых этапах сборки удалите папку Base.lproj из ресурсов Copy Bundle (если они указаны) и убедитесь, что каждая из ваших раскадровок указана и скопирована отдельно.

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


1

Удаление строки в plist вызвало черный экран и в моем приложении. И я исправил это, включив целевое членство в раскадровке


1

Как сказал Калпит Гаджера, «откройте info.plist вашего проекта и удалите выбранную строку, отображаемую на скриншоте». Вы просто удаляете "Основное имя файла раскадровки" из Info.plist. После того, как вы удалите его, очистите и запустите, программа больше не будет давать сбой, но будет отображать черный экран. Снова откройте Info.plist и снова добавьте строку вручную. Проблема решена.


0

выберите main.storyboard, измените вид на iOS 6.1 и ранее, тогда xcode сообщит вам, что вам нужно сделать.

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


0

Мое решение:

Когда я добавил Seque Connection между двумя представлениями и в конфигурации проекта, цель развертывания меньше 8.0, я получаю эту ошибку.

хорошо, понятно, когда вы разрабатываете для IOS 6.0 (например), вы не можете использовать Seque, потому что Seque требует IOS 8.0 или новее ...... ;-)

Итак, я установил цель развертывания на 8.0, и ошибка исчезла !!!! в другое время я отменяю все Segue Connections и обрабатываю их с помощью IBAction, старой школы ;-)


0

Я перемещал файл Main.Storyboard в «синюю» подпапку, что вызывало проблемы, мне пришлось добавить подпапки, следуя этим инструкциям. Xcode 6.3 New File Issue

затем перемещение файла Main.Storyboard в желтую подпапку сработало для меня


0

Моя проблема была решена путем удаления .xmlсуффикса из файла Main.storyboard.xml file.

Судя по всему, суффикс изменился с той версии, из которой я импортировал проект.

Поэтому переименование файла (удаление .xmlсуффикса) и перезапуск устранили Project-> clean....проблему.


0

Если у вас все еще есть черный экран, попробуйте добавить ниже код в делегат сцены

willConnectTo

    guard let windowScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(frame: windowScene.coordinateSpace.bounds)
    window?.windowScene = windowScene
    let navController = UINavigationController()
    let mainstoryboard:UIStoryboard = UIStoryboard(name: "Your storyboard name", bundle: nil)
    let initialController = mainstoryboard.instantiateViewController(withIdentifier: "your initial controller Identifier") as! initialController
    navController.addChild(initialController)
    window?.rootViewController = navController
    window?.makeKeyAndVisible()

0

Если ваша раскадровка добавлена ​​в проект (что вы определите в разделе Project File Inspector в области утилиты xcode)Флажок установлен в целевой зоне членства

Вам просто нужно удалить его Main.Storyboardиз «Копировать ресурс пакета» (в Build Phase) и снова добавить его в «Копировать ресурс пакета». Это сработало для меня.введите описание изображения здесь


-1

Хорошо, это был процесс. Пробует столько разных вещей. Запуск xcode 6.4 в ОС 10.11. Не удается найти "Основную" проблему. В конце концов я переместил main.storyboard на рабочий стол из Finder, сделал чистую сборку и вышел из xcode. перезапустил xcode, теперь у него красный main.storyboard. я запускаю его практически то же самое. затем я щелкаю правой кнопкой мыши папку проекта и выбираю опцию добавления файлов ... Перейдите туда, где она находится, и откройте ее. затем, когда он будет справа, должен быть инспектор по удостоверениям личности. щелкните небольшую папку под местоположением. перейдите к этой папке еще раз и выберите «Выбрать». Потом я побежал, и это сработало. Аминь !!!


-1

Выберите контроллер представления, который вы хотите сначала отобразить в списке в левой части раскадровки, затем в инспекторе атрибутов убедитесь, что его заголовок - «Основной» и установлен флажок «Является исходным контроллером представления».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.