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.