我正在使用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上找到一个教程。没有运气。
答案 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/