màn hình đen khi tôi chạy ứng dụng iOS của mình


12

Tôi đang cố gắng làm một ứng dụng iOS mới trong Xcode. Tôi đã tạo một bảng phân cảnh chính và tôi đã thêm một nhãn trên ViewContoder của mình. Khi tôi chạy ứng dụng của mình, giây đầu tiên nó hiển thị nhãn và sau đó trở thành màn hình đen mà không có bất kỳ lỗi nào.

Tôi đang làm việc trên Xcode 11 (Swift 5) và thông báo này xuất hiện ở đầu ra:

[SceneConfiguration] Cấu hình Info.plist "Cấu hình mặc định" cho UIWindowSceneSessionRoleApplication chứa khóa UISceneDelegateClassName, nhưng không thể tải lớp với tên "gina.SceneDelegate"

Tôi không biết lỗi của mình ở đâu.

màn hình đen khi chạy


vui lòng gửi đoạn mã
Mark Loyman

Tôi nghĩ rằng bạn loại bỏ lớp SceneDelegate khỏi dự án của bạn
Alfi

Rất nhiều câu trả lời dưới đây dường như bỏ lỡ điểm lỗi và mô tả các bản sửa lỗi không liên quan đến lỗi chính xác trong câu hỏi. Trong trường hợp của tôi, tôi chỉ quên thêm SceneDelegatemục tiêu của mình và kiểm tra hộp đã sửa nó.
Wayne

Câu trả lời:


32

iOS 13

Chỉ khi mục tiêu là 13 hoặc lớn hơn.

SceneDelegatekhông được hỗ trợ trước iOS 13 . Nếu bạn muốn sử dụng SceneDelegatevà cũng muốn hỗ trợ iOS trước iOS 13 thì bạn phải thêm một số thay đổi cho dự án của mình.

  1. Thêm thuộc tính sẵn có cho cả lớp trong tệp SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Tệp AppDelegate.swift có hai SceneDelegatephương thức mới . Thêm thuộc tính sẵn có cho họ là tốt.
@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. Cuối cùng, thêm UIWindowđối tượng trong 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 trở về trước

AppDelegatecần một UIWindowtài sản. iOS 13 sử dụng SceneDelegatetrong các dự án mới. Chỉ định UIWindowđối tượng và xóa tệp SceneDelegate.swift .

Nếu bạn đã xóa SceneDelegatedự án khỏi dự án, thì bạn phải xóa từ điển Bản khai cảnh ứng dụng khỏi Info.plist .

Thông tin


Tuyệt vời, Cảm ơn bạn
Mohammad Razipour

1

Bạn cần khởi tạo cửa sổ như thế này:

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

và thêm những thứ này trong 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>

Đó là tất cả những gì bạn cần làm.


Tôi đã có cùng một vấn đề, tiền tố $(PRODUCT_MODULE_NAME).giải quyết vấn đề của tôi.
Sean Howell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.