[英]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.