iOS-终止后由协调者还原应用程序状态

时间:2020-02-28 03:02:42

标签: ios swift state-restoration coordinator-pattern


我的应用程序中的导航系统包含协调器模式。当我的应用程序首次启动时,一切正常。但是,当应用程序退回到后台并且电话系统终止了它,而我又尝试恢复它时,该应用程序将再次启动。因此,如果系统在后台终止应用程序,则需要恢复我的应用程序状态。
我的 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
}
}


我了解到,当我的应用启动时,它会运行串行主题协调器,而没有还原逻辑。例如,如果用户转到 Topic 协调员,然后转到 Auth 协调员( Topic 协调员的子代),然后转到首页 >协调器( Auth 协调器的子级),如何在系统应用启动终止后恢复 Home 协调器?

0 个答案:

没有答案