1


我的应用程序中的导航系统包含协调器模式。当我的应用程序第一次启动时,一切正常。但是当应用程序退回到后台并且电话系统终止它并且我试图回到它时,应用程序再次启动。因此,如果系统在后台终止应用程序,我需要恢复我的应用程序状态。
我的AppDelegate

import UIKit
import Swinject

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
let container = Container()

private var appCoordinator: AppCoordinator!

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    setupDependecies()

    return true
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow()
    appCoordinator = AppCoordinator(window: window!, container: container)
    appCoordinator.start()
    window?.makeKeyAndVisible()

    return true
}

func application(_ application: UIApplication, shouldSaveSecureApplicationState coder: NSCoder) -> Bool {
    return true
}

func application(_ application: UIApplication, shouldRestoreSecureApplicationState coder: NSCoder) -> Bool {
    return true
}
}


AppCoordinator

import Foundation
import UIKit
import Swinject

enum AppChildCoordinator {
case serial
case topic
}

final class AppCoordinator: Coordinator {

private let window: UIWindow
let container: Container
private var childCoordinators = [AppChildCoordinator: Coordinator]()
private let navigationController: UINavigationController
private let plistService: PlistService

init(window: UIWindow, container: Container) {
    self.window = window
    self.container = container
    navigationController = UINavigationController()
    self.window.rootViewController = navigationController
    plistService = container.resolve(PlistService.self)!
}

func start() {
    let isActivated: Bool?
    isActivated = plistService.readPlist(namePlist: "Preferences", key: Constans.isActivated) as! Bool?
    if isActivated != nil && isActivated! {
        showTopic()
    } else {
        showSerial()
    }
}

private func showSerial() {
    let serialCoordinator = SerialCoordinator(container: container, navigationController: navigationController)
    childCoordinators[.serial] = serialCoordinator
    serialCoordinator.delegate = self
    serialCoordinator.start()
}

private func showTopic() {
    let topicCoordinator = TopicCoordinator(container: container, navigationController: navigationController)
    childCoordinators[.topic] = topicCoordinator
    topicCoordinator.delegate = self
    topicCoordinator.start()
}
}

extension AppCoordinator: SerialCoordinatorDeligate {

func serialCoordinatorDidFinish() {
    childCoordinators[.serial] = nil
    showTopic()
}
}

extension AppCoordinator: TopicCoordinatorDeligate {

func topicCoordinatorDidFinish() {
    childCoordinators[.topic] = nil
}
}


我知道当我的应用程序启动时,它会在没有恢复逻辑的情况下运行SerialTopic coordinator。例如,如果用户转到Topic coordinator,然后转到Auth coordinator(Topic coordinator 的孩子),然后转到Home coordinator(Auth coordinator 的孩子),如何在系统应用程序终止启动后恢复Home coordinator?

4

0 回答 0