0

我已经使用 实现了 iOS/iPadOS 13 状态恢复NSUserActivity,主要是因为我的应用程序支持多个场景。

问题是,当我运行具有两个并排场景的模拟器并通过重建活动强制重新启动应用程序时,不会保存活动,并且重新启动时 UI 没有正确恢复。

另一方面,如果我首先返回 iPad 主屏幕,然后强制重新启动应用程序,则活动会正确恢复。

这是否意味着我的应用程序崩溃会阻止保存这些活动,从而导致重新启动时出现不一致的 UI 状态?

我怎么能定期“强制”储蓄活动(被stateRestorationActivity(for scene:)调用)?

4

1 回答 1

0

问题是,当我运行具有两个并排场景的模拟器并通过重建活动强制重新启动应用程序时,不会保存活动,并且重新启动时 UI 没有正确恢复。

当您“通过重建强制重启应用程序”时看到的是预期的行为。当你像这样强制重启时,应用程序没有机会保存你的 NSUserActivities。根据 Apple 的状态恢复教程

如果您想测试您的应用程序恢复其状态的能力,请不要在调试期间使用应用程序切换器来终止应用程序。相反,使用 Xcode 终止应用程序,或以编程方式终止应用程序。一种技术是使用 Home 按钮暂停您的应用程序,然后在 Xcode 中停止调试器。当您使用 Xcode 再次启动应用程序时,UIKit 会启动状态恢复过程。

我知道您没有在切换器中杀死应用程序,但任何“强制”停止都会禁用状态恢复(带有警告)。要测试状态恢复,请改用上面 Apple 教程建议的技术。

这是否意味着我的应用程序崩溃会阻止保存这些活动,从而导致重新启动时出现不一致的 UI 状态?

我认同。这是之前的警告。虽然 Apple 表示终止应用程序(无论是在应用程序切换器中还是从崩溃或其他原因中)将禁用状态恢复,但这不一定是真的。您可以亲眼看到,Apple 自己的应用程序在应用程序切换器中被杀死并重新打开时会出现奇怪的状态恢复不一致(您可能需要尝试几次才能获得不一致的行为)。虽然我没有对此进行测试,但我想这些相同的不一致可能会因应用程序崩溃而发生。

于 2020-06-30T15:24:38.070 回答