0

Xcode 11.3.1 にアップグレードした後、アプリを開くときに一部のデバイスでアプリがクラッシュし始めたことに気付きました。これは、さまざまな iOS バージョンと iPhone モデルで発生します。ただし、同じ iOS バージョンまたは iPhone モデルの一部のデバイスでは、アプリは正常に動作します。

これらのデバイスにアプリの以前のビルド (以前の Xcode バージョンでビルドされたもの) をインストールすると、クラッシュは発生しません。

Optionalデバッグ中に、ログイン モジュールのプレゼンターを使用してラップを解除しようとするとクラッシュが発生することがわかりました。このプレゼンターは作成時に値を持ち、割り当てられますrootViewControllerが、AppDelegate で設定した後window.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変数は本来あるべき値を持っていますが、 isの値presenterを割り当てるとすぐに。window.rootViewController = navigationControllerpresenternil

4

1 に答える 1