ios - 在 Swift 4 中加载应用程序时崩溃?

标签 ios swift

当应用程序加载时出现此错误时我遇到崩溃:无法为 UIMainStoryboardFile 'Main' 实例化默认 View Controller - 也许未设置指定的入口点? 所以,在 Main.Storyboard 我不检查 是初始 View Controller 因为正如您在我的代码中看到的那样,我在我的 AppDelegate 中执行此操作,但是当应用运行它崩溃并在我的 assertionFailure() 捕获时停止。谁能帮我解决这个问题?谢谢您的帮助。此外,我已输入 LocationViewController 作为我的 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
}

关于ios - 在 Swift 4 中加载应用程序时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047090/

相关文章:

swift - 获取 UIView/UIImageView 的特定角坐标,而不管其旋转

ios - 显示 MDTimePicker 时键盘未关闭

ios - 自定义表格 View 单元格中的 UITextField。点击单元格/文本字段时显示选取器 View

ios - 如何全局保存一个人的 UID 以在 Swift 中的任何 ViewController 中检索它

iphone - 使用 NSPredicate 过滤后更新原始 NSMutableArray

android - 如何在 Flutter SharedPreferences 中访问 iOS UserDefaults 存储的数据

iphone - 我可以在 XCode 4.3.2 中禁用 "Upgrade debugger from GDB to LLDB"警告吗?

iphone - iPhone 中带有进度条和取消按钮的启动屏幕

SwiftUI 将 ViewModifier 作为参数传递

ios - 如何从 Swift 中删除 Parse 中的对象