чорний екран, коли я запускаю програму iOS


12

Я намагаюся зробити нову програму для iOS у Xcode. Я зробив основну рекламну дошку і додав мітку на свій ViewController. Коли я запускаю свою програму, спочатку вона показує мітку, а потім стає чорним на екрані без будь-яких помилок.

Я працюю над Xcode 11 (Swift 5), і це повідомлення з'являється на виході:

[SceneConfiguration] Конфігурація Info.plist "Конфігурація за замовчуванням" для UIWindowSceneSessionRoleApplication містив ключ UISceneDelegateClassName, але не зміг завантажити клас з назвою "gina.SceneDelegate"

Я не знаю, де моя помилка.

чорний екран під час роботи



Я думаю, ви видалите клас SceneDelegate зі свого проекту
Алфі

Більшість відповідей нижче, здається, пропускають суть помилки та описують виправлення, які не стосуються точної помилки. У моєму випадку я просто забув додати SceneDelegateсвою ціль і встановивши прапорець у фіксованому.
Уейн

Відповіді:


32

iOS 13

Тільки якщо ціль 13 або більше.

SceneDelegateне підтримується до iOS 13 . Якщо ви хочете використовувати, SceneDelegateа також хочете підтримувати iOS до iOS 13, тоді вам доведеться додати деякі зміни до свого проекту.

  1. Додайте атрибут доступності до всього класу у файл SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Файл AppDelegate.swift має два нові SceneDelegateметоди. Додайте до них і атрибут доступності.
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
  ...
}

@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
  ...
}
  1. Нарешті, додайте UIWindowоб’єкт у AppDelegate.swift .
class AppDelegate: UIResponder, UIApplicationDelegate {

    //Add this line
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    ...
}

iOS 12 і новіші версії

AppDelegateпотребує UIWindowмайно. iOS 13 використовує SceneDelegateв нових проектах. Вкажіть UIWindowоб'єкт та видаліть файл SceneDelegate.swift .

Якщо ви видалили SceneDelegateпроект, ви повинні видалити словник програми маніфесту сцени з Info.plist .

Info.plist



1

Вам потрібно ініціалізувати вікно так:

let window = UIWindow(windowScene: scene as! UIWindowScene)

і додайте їх у info.plist:

<key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <true/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UILaunchStoryboardName</key>
                    <string>LaunchScreen</string>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                </dict>
            </array>
        </dict>
    </dict>

Це все, що вам потрібно зробити.


У мене була така сама проблема, префіксація $(PRODUCT_MODULE_NAME).вирішила мою проблему.
Шон Хоуелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.