簡體   English   中英

在 Swift 4 中加載應用程序時崩潰?

[英]Getting crash when application is loading in Swift 4?

當應用程序加載時出現此錯誤,我崩潰了: Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? 因此,在Main.Storyboard我不檢查is initial view controller因為正如您在我的代碼中看到的那樣,我在AppDelegate執行此操作,但是當應用程序運行時,它會崩潰並在我的assertionFailure()捕獲時停止。 誰能幫我解決這個問題? 謝謝您的幫助。 此外,我已輸入LocationViewController作為我的 Storyboard ID, Use storyboard id選中Use storyboard id (我什至檢查過它仍然是同樣的錯誤)。

這是我的代碼:

class AppDelegate: UIResponder, UIApplicationDelegate {
    let window = UIWindow()
    let locationService = LocationService()
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let service = MoyaProvider<YelpService.BusinessesProvider>()
    let jsonDecoder = JSONDecoder()

       func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
    service.request(.search(lat: 34.148000, long: -118.361443)) { (result) in
        switch result {
        case .success(let response):
            let root = try? self.jsonDecoder.decode(Root.self, from: response.data)
            print(root)
        case .failure(let error):
            print("Error: \(error)")
        }
    }

    let locationViewController = storyboard.instantiateViewController(withIdentifier: "LocationViewController") as? LocationViewController
    locationViewController?.locationService = locationService
    window.rootViewController = locationViewController

    window.makeKeyAndVisible()

    return true
}
}

您的應用程序崩潰是因為您的 locationService.status 處於默認狀態,因此它總是達到 assertionFailure()。

當控制流預計不會到達調用時,使用此函數停止程序,而不會影響交付代碼的性能 - 例如,在交換機的默認情況下,您知道必須滿足其他情況之一https://developer.apple.com/documentation/swift/1539616-assertionfailure

1) 找到一種方法來修復您的 locationService.status

2)繞過switch語句

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
    service.request(.search(lat: 34.148000, long: -118.361443)) { (result) in
        switch result {
        case .success(let response):
            let root = try? self.jsonDecoder.decode(Root.self, from: response.data)
            print(root) <-- Console is printing nil here because your jsonDecoder failed.
        case .failure(let error):
            print("Error: \(error)")
        }
    }

    let locationViewController = storyboard.instantiateViewController(withIdentifier: "LocationViewController") as? LocationViewController
    locationViewController?.locationService = locationService
    window.rootViewController = locationViewController

    window.makeKeyAndVisible()

    return true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM