schermo nero quando eseguo la mia applicazione iOS


12

Sto cercando di creare una nuova app iOS in Xcode. Ho creato uno storyboard principale e ho aggiunto un'etichetta sul mio ViewController. Quando eseguo la mia applicazione, per prima cosa mostra l'etichetta e poi diventa lo schermo nero senza errori.

Sto lavorando su Xcode 11 (Swift 5) e questo messaggio appare sull'output:

[SceneConfiguration] La configurazione di Info.plist "Configurazione predefinita" per UIWindowSceneSessionRoleApplication conteneva la chiave UISceneDelegateClassName, ma non è stato possibile caricare la classe con il nome "gina.SceneDelegate"

Non so dove sia il mio errore.

schermo nero durante l'esecuzione


Si prega di inviare frammento di codice
— Mark Loyman

Penso che tu abbia rimosso la tua classe SceneDelegate dal tuo progetto
— Alfi,

Molte delle risposte di seguito sembrano mancare il punto dell'errore e descrivere correzioni che non sono rilevanti per l'errore esatto in questione. Nel mio caso, avevo appena dimenticato di aggiungere il SceneDelegatemio obiettivo e selezionando la casella è stato risolto.
— Wayne,

Risposte:


32

iOS 13

Solo se il bersaglio è 13 o superiore.

SceneDelegatenon è supportato prima di iOS 13 . Se si desidera utilizzare SceneDelegatee si desidera supportare anche iOS prima di iOS 13, è necessario aggiungere alcune modifiche al proprio progetto.

  1. Aggiungi l'attributo di disponibilità a tutta la classe nel file SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Il file AppDelegate.swift ha due nuovi SceneDelegatemetodi. Aggiungi l'attributo di disponibilità anche a loro.
@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. Infine, aggiungi l' UIWindowoggetto in 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 e precedenti

AppDelegateha bisogno di una UIWindowproprietà. iOS 13 si utilizza SceneDelegatein nuovi progetti. Specificare l' UIWindowoggetto e rimuovere il file SceneDelegate.swift .

Se il SceneDelegateprogetto è stato rimosso , è necessario rimuovere il dizionario Manifest scena applicazione da Info.plist .

Info.plist


Ottimo, grazie
— Mohammad Razipour,

1

È necessario inizializzare la finestra in questo modo:

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

e aggiungili in 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>

Questo è tutto ciò che devi fare.


Ho avuto lo stesso problema, il prefisso ha $(PRODUCT_MODULE_NAME).risolto il mio problema.
— Sean Howell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.