在iOS 13中,何时保存数据?
iOS 13中的场景支持和多个窗口使何时保存数据的问题变得复杂。场景代理的在iOS 13中,何时保存数据?,ios,save,ios13,Ios,Save,Ios13,iOS 13中的场景支持和多个窗口使何时保存数据的问题变得复杂。场景代理的sceneDidEnterBackground似乎是一个不错的地方,但有时它还不够: 如果您的场景位于最前面,并且用户转到应用程序切换器并终止您的应用程序,您将获得sceneddisconnect,application将终止,而不是sceneddenterbackground 如果用户在您的应用程序位于最前端时关闭设备,您将得到应用程序将终止,而不是场景数据背景 在支持窗口场景和可能多个窗口的iOS 13应用程序中,
sceneDidEnterBackground
似乎是一个不错的地方,但有时它还不够:
- 如果您的场景位于最前面,并且用户转到应用程序切换器并终止您的应用程序,您将获得
,sceneddisconnect
,而不是application将终止
sceneddenterbackground
- 如果用户在您的应用程序位于最前端时关闭设备,您将得到
,而不是应用程序将终止
场景数据背景
因此,看起来苹果公司建议我们在事件发生时保存用户数据,比如响应用户所做的事情(关闭视图控制器、切换开关、在文本字段中输入文本等),但我们可以使用
sceneWillResignActive(:)
和/或sceneDidDisconnect(:)
如果我们需要或想要保存一些数据。这里是第三种情况:用户打开应用程序的多个场景(每个场景都是全屏)。在前台查看其中一个全屏场景时,如果他们切换到应用程序切换器并从屏幕顶部滑动最近的场景,则该场景确实会调用其sceneDidEnterBackground
。应用程序没有终止,因为还有另一个场景(当前在后台)。我是说“有”,我不是说“没有”。运行你的应用程序。让两个场景并排出现在屏幕上。将分隔器滑动到屏幕边缘,留下一个场景全屏显示。当然,另一个将转到后台,并为此调用sceneDidEnterBackground
。现在双击home(主页)按钮打开应用程序切换程序。你看这两个场景。如果滑动刚刚留在前景中的场景,则该场景现在将调用其sceneDidEnterBackground
。至少我的应用程序是这样的。@rmaddy好吧,我发现这非常令人困惑,不仅因为我在模拟器和设备上得到了不同的结果,还因为控制台穴居人使用OSLog进行调试并不完全可靠。用户在应用程序切换器中刷我们的情况非常困难,我在这里为它创建了一个单独的Q-and-a:如果我正确地阅读了你对另一个问题的答案(这与我看到的和我在前面的评论中发布的内容相匹配),那么这不就是你在这个问题上的第一个要点不正确吗?事实上,在这种情况下,你确实会接到一个呼叫sceneDidEnterBackground
。@rmaddy好吧,这是我在另一个回答中关注的一个奇怪的人出场景:一个有场景支持但关闭了多个窗口的应用程序,在iPad上运行。是的,我想到了willResignActive。我担心的是这种情况经常发生。打开通知中心,您会收到两次通知。不过,有趣的是,这证实了我自己开始得出的结论。