DrawerController的iOS状态恢复问题

DrawerController的iOS状态恢复问题,第1张

概述我有一个使用 Xcode 8.3.3在 Swift 3.1中编写的应用程序. 我目前正在尝试实施国家保护/恢复. 为此,我在AppDelegate.swift中实现了shouldSaveApplicationState和willFinishLaunchingWithOptions方法,并设置为返回true: // AppDelegate.swift// STATE RESTORATION CAL 我有一个使用 Xcode 8.3.3在 Swift 3.1中编写的应用程序.

我目前正在尝试实施国家保护/恢复.

为此,我在AppDelegate.swift中实现了shouldSaveApplicationState和willFinishLaunchingWithOptions方法,并设置为返回true:

// AppDelegate.swift// STATE RESTORATION CALLBACKSfunc application(_ application: UIApplication,shouldSaveApplicationState coder: NSCoder) -> Bool {    deBUG_print(this: "shouldSaveApplicationState")    return true}func application(_ application: UIApplication,shouldRestoreApplicationState coder: NSCoder) -> Bool {    deBUG_print(this: "shouldRestoreApplicationState")    restoringState = true    return true}func application(application: UIApplication,willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {    deBUG_print(this: "willFinishLaunchingWithOptions")    return true}

我还为所有相关的vIEwcontrollers和navigationcontrollers提供了恢复ID.

我正在使用第三方库来处理侧抽屉导航容器(https://github.com/sascha/DrawerController).初始vIEwcontroller是在dIDFinishLaunchingWithOptions方法中以编程方式设置的,见下文.

// AppDelegate.swiftvar centerContainer: DrawerController?func application(_ application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)    let centerVIEwController =   mainStoryboard.instantiateVIEwController(withIDentifIEr: "RootVIEwControllerNav") as! UINavigationController     let leftVIEwController = mainStoryboard.instantiateVIEwController(withIDentifIEr: "SIDeDrawerVIEwController") as! UItableVIEwController    centerContainer = DrawerController(centerVIEwController: centerVIEwController,leftDrawerVIEwController: leftVIEwController)    centerContainer?.restorationIDentifIEr = "DrawerControllerVIEw"    window = UIWindow(frame: UIScreen.main.bounds)    window?.restorationIDentifIEr = "MainWindow"    window?.rootVIEwController = centerContainer    window?.makeKeyAndVisible()    return true}

当应用程序打开并尝试恢复状态时,它会暂时显示正确的vIEwcontroller(应用程序关闭前的最后一个控制器),然后一旦应用程序变为活动状态,它将恢复为初始vIEwcontroller.

例如,发生以下情况:

>打开应用程序通过侧面菜单导航到“设置”视图
>导航到主屏幕
>停止运行xcode并再次启动它
>应用程序将打开显示设置视图,然后恢复为主视图

任何人都可以告诉我是什么导致了这个,或者我哪里出错了?如果您需要更多代码示例,请与我们联系.

解决方法
func application(_ application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {        // OverrIDe point for customization after application launch.        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)        let leftSIDeDrawerVIEwController = mainStoryboard.instantiateVIEwController(withIDentifIEr: "SIDeDrawerVIEwController") as! UItableVIEwController        let centerVIEwController = mainStoryboard.instantiateVIEwController(withIDentifIEr: "RootVIEwControllerNav") as! UINavigationController        let navigationController = UINavigationController(rootVIEwController: centerVIEwController)        navigationController.restorationIDentifIEr = "navigationControllerKey"        let leftSIDeNavController = UINavigationController(rootVIEwController: leftSIDeDrawerVIEwController)        leftSIDeNavController.restorationIDentifIEr = "leftNavigationController"        self.drawerController = DrawerController(centerVIEwController: navigationController,leftDrawerVIEwController: leftSIDeNavController,rightDrawerVIEwController: nil)        self.drawerController.openDrawerGestureModeMask = .all        self.drawerController.closeDrawerGestureModeMask = .all        self.window = UIWindow(frame: UIScreen.main.bounds)        self.window?.rootVIEwController = self.drawerController        return true    }
总结

以上是内存溢出为你收集整理的DrawerController的iOS状态恢复问题全部内容,希望文章能够帮你解决DrawerController的iOS状态恢复问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1001401.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存