更改首选语言后,如何恢复应用程序的状态?

时间:2019-11-26 05:17:01

标签: ios swift xcode localization swiftui

我正在使用SwiftUI(如果在这种情况下很重要),并且我对在iOS 13及更高版本上运行的应用程序感兴趣。

我的应用程序有2种语言。我已经添加了Settings.bundle文件,现在我可以看到我的应用程序的“首选语言”设置。到目前为止一切顺利。

问题在于,当我更改语言时,应用会重新启动并重置。我想保留其状态。

在苹果公司的WWDC演示中,据说采用了这种方法(以下是苹果公司的幻灯片中的文字):

  

ViewController状态还原

     

通过“设置”更改语言将重新启动您的应用程序启用   在您的AppDelegate中恢复状态:

     

application(_:shouldSaveApplicationState:)

     

application(_:shouldRestoreApplicationState:)

     

在控制器上设置restoreIdentifier以进行语言切换   无缝

这:

  

场景状态恢复

     

在SceneDelegate中启用状态还原   与:

     

stateRestorationActivity(用于场景:)

     

返回一个NSUserActivity对象,该对象对场景状态进行编码

但是这些信息非常简短,我不知道如何从这些示例中实现代码。我还在Apple文档中找到了这篇文章: https://developer.apple.com/documentation/uikit/uiviewcontroller/restoring_your_app_s_state 但这比WWDC演示文稿中的幻灯片要复杂得多。他们在本文中写道,有2种不同的方法:适用于iOS 13及更高版本以及适用于12及更低版本。正如我已经提到的,我只对iOS 13及更高版本感兴趣。使它工作最简单的方法是什么?

我确实尝试在这里找到解决方案。并试图在Google和Youtube上找到一个教程。没有运气。

1 个答案:

答案 0 :(得分:0)

在我看来,您正在寻找有关SwiftUI和状态还原的教程。在这里尝试这个:

在iOS 13(iPadOS)上使用NSUserActivity和SwiftUI进行UI场景状态还原

多窗口支持对iOS 13和iPadOS应用程序的生命周期进行了根本性的更改。它与场景的概念紧密相关,场景的概念代表了应用程序用户界面的单个实例。每个场景都有其自己的生命周期,并且可以同时运行多个场景。 我正在解释什么是场景以及如何使用UIScene在iOS 13(iPadOS)App Life Cycle中将它们组合在一起。

由于系统管理您的应用场景,因此它可能会连接和断开场景以回收其资源。在这种情况下,用户界面消失了,将被快照替换。下次用户打开该场景时,他们将面对一个初始窗口,所有未完成的工作都将丢失。

解决方案是按场景进行状态还原,从iOS 13(iPadOS)开始,此功能已成为丰富用户体验的重要功能。在本文中,我们将探讨如何使用NSUserActivity和SwiftUI实施基于场景的状态恢复。

https://www.vadimbulavin.com/ios13-ipados-uiscene-state-restoration-with-nsuseractivity-and-swiftui/