layar hitam ketika saya menjalankan aplikasi iOS saya


12

Saya mencoba membuat aplikasi iOS baru di Xcode. Saya membuat storyboard utama dan menambahkan label pada ViewController saya. Ketika saya menjalankan aplikasi saya, pertama itu menunjukkan label dan kemudian menjadi layar hitam tanpa kesalahan.

Saya sedang mengerjakan Xcode 11 (Swift 5) dan pesan ini muncul di keluaran:

[SceneConfiguration] Konfigurasi Info.plist "Konfigurasi Default" untuk UIWindowSceneSessionRoleAplikasi berisi kunci UISceneDelegateClassName, tetapi tidak dapat memuat kelas dengan nama "gina.SceneDelegate"

Saya tidak tahu di mana kesalahan saya.

layar hitam saat berjalan


silakan kirim cuplikan kode
Mark Loyman

Saya pikir Anda menghapus kelas SceneDelegate Anda dari proyek Anda
Alfi

Banyak jawaban di bawah ini sepertinya melewatkan inti kesalahan dan menjelaskan perbaikan yang tidak relevan dengan kesalahan sebenarnya yang dimaksud. Dalam kasus saya, saya baru saja lupa untuk menambahkan SceneDelegateke target saya dan mencentang kotak memperbaikinya.
Wayne

Jawaban:


32

iOS 13

Hanya jika targetnya 13 atau lebih besar.

SceneDelegatetidak didukung sebelum iOS 13 . Jika Anda ingin menggunakan SceneDelegatedan juga ingin mendukung iOS sebelum iOS 13 maka Anda harus menambahkan beberapa perubahan pada proyek Anda.

  1. Tambahkan atribut ketersediaan ke seluruh kelas dalam file SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. File AppDelegate.swift memiliki dua SceneDelegatemetode baru . Tambahkan atribut ketersediaan ke mereka juga.
@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. Terakhir, tambahkan UIWindowobjek di 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 dan sebelumnya

AppDelegatemembutuhkan UIWindowproperti. iOS 13 digunakan SceneDelegatedalam proyek-proyek baru. Tentukan UIWindowobjek dan hapus file SceneDelegate.swift .

Jika Anda telah menghapus SceneDelegatedari proyek, maka Anda harus menghapus kamus Application Scene Manifest dari Info.plist .

Info.plist


Hebat, Terima kasih
Mohammad Razipour

1

Anda perlu menginisialisasi jendela seperti ini:

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

dan tambahkan ini di 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>

Itu semua yang perlu Anda lakukan.


Saya memiliki masalah yang sama, awalan $(PRODUCT_MODULE_NAME).menyelesaikan masalah saya.
Sean Howell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.