升级到 Xcode 11.3.1 后,我们注意到我们的应用在打开时开始在某些设备上崩溃。它发生在不同的 iOS 版本和 iPhone 型号上。但是,在某些具有相同 iOS 版本或 iPhone 型号的设备上,该应用程序运行良好。
在这些设备上安装早期版本的应用程序(使用早期 Xcode 版本构建)时不会发生崩溃。
Optional
在调试时,我们发现在使用登录模块的演示者时尝试解包时会发生崩溃。这个演示者在创建和分配时有一个值,但是在rootViewController
AppDelegatewindow.rootViewController = navigationController
中设置我们之后,执行跳转到viewDidLoad()
下面显示的函数,此时演示者是nil
.
class LoginViewController: LoginPasswordResetViewController {
var presenter: LoginPresenterProtocol!
override func viewDidLoad() {
super.viewDidLoad()
updateUI(model: presenter.loadViewModel())
presenter.viewDidLoad()
}
}
AppDelegate.swift 中的相关代码:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let env = Environment()
if let app = UIApplication.shared.delegate as? AppDelegate,
let window = app.window,
let loginVC = LoginModule().createModule(moduleData: LoginModuleData(env: env),
service: LoginService(env: env),
storageService: LocalStorageService(env: env)) {
let navigationController = UINavigationController(rootViewController: loginVC)
window.rootViewController = navigationController
window.makeKeyAndVisible()
}
return true
}
我尝试使用此处提到的 SceneDelegate.swift Set RootViewController iOS 13来设置 RootViewController 没有运气。
关于什么可能是这个问题的原因的任何想法?
附加信息:
该createModule
函数初始化并设置presenter
:
func createModule(moduleData: LoginModuleDataProtocol, service: LoginServiceProtocol, storageService: LocalStorageServiceProtocol) -> LoginViewController? {
guard let viewController: LoginViewController = UIStoryboard.viewController(from: self) else {
return nil
}
let presenter = LoginPresenter()
let interactor = LoginInteractor()
let router = LoginRouter()
// VC
viewController.presenter = presenter
// Presenter
presenter.viewController = viewController
presenter.interactor = interactor
presenter.router = router
// Interactor
interactor.presenter = presenter
interactor.dataManager = LoginDataManager(data: moduleData, service: service, storageService: storageService)
// Router
router.viewController = viewController
return viewController
}
创建模块后,loginVC
变量具有presenter
应有的值,但只要我们window.rootViewController = navigationController
为presenter
is赋值nil
。