我可以将`willConnectTo`用作iOS中单窗口应用程序的`didFinishLaunching`吗?
Posted
技术标签:
【中文标题】我可以将`willConnectTo`用作iOS中单窗口应用程序的`didFinishLaunching`吗?【英文标题】:Can I use `willConnectTo` as `didFinishLaunching` for single window app in iOS? 【发布时间】:2021-03-21 04:06:51 【问题描述】:我的应用程序只有一个窗口。将willConnectTo
用作didFinishLaunching
并将sceneDidDisconnect
用作假设的didTerminateApp
是否安全?
我不希望我的旧 AppDelegate 逻辑拆分为 2 个文件。所以我想要这个设置主要是为了方便。
我在场景委托的sceneDidDisconnect
函数中阅读了评论:
这发生在场景进入后台后不久,或者它的会话被丢弃时。
但是,当我尝试时,情况并非如此 - 在我的应用程序后台运行后它永远不会被调用。我的猜测是这只适用于多窗口的情况。
脚注:我了解对于多窗口应用(在 iPad 上),场景生命周期 != 应用生命周期。我已经阅读了大约 3-4 篇关于新 SceneDelegate
的在线教程。我只是要求单窗口情况。
【问题讨论】:
这是非常广泛的,相当模糊和漫无边际。它似乎做了很多错误的假设。你能指定一个具体的问题你想问吗? @matt 仅 1 个问题:我可以像使用didFinishLaunching
一样使用 willConnectTo
但这毫无意义。它们是不同的,它们都在启动时被调用。每个人都有自己的工作要做。
@matt 你是说即使在单窗口应用程序中,我也不能像didFinishLaunching
一样使用willConnectTo
?您能否提供更多理由(而不仅仅是“他们不同”)
我不知道你说的“好像”是什么意思,你也没有解释。当然,大多数 工作都是从一个转移到另一个,例如构建视图层次结构和发现传入的 URL 等。但是应用程序初始化仍然是 didFinishLaunching 的工作。他们每个人都有工作要做。我怀疑在大多数应用程序中,didFinishLaunching 将做的很少。但它仍然存在。
【参考方案1】:
在您的情况下,您可能会将willConnectTo
视为didFinishLaunching
(基于您描述的当前行为)。但如果苹果改变了这种行为,我不会感到惊讶。
这是一种更“面向未来”的方法:
既然你的应用只支持单场景,为什么不让AppDelegate
成为SceneDelegate
的代表呢?换句话说,将SceneDelegate
的生命周期事件中继到AppDelegate
。
半伪代码:
// SceneDelegate
func didEnterForground()
// AppDelegate must be present before SceneDelegate
UIApplication.shared.didEnterForground()
// AppDelegate
// This is pretty much the old-style AppDelegate that contains all your logic
func didFinsihLaunching()
func didEnterForground()
现在不是将所有逻辑都移到 SceneDelegate
中,而是将它们保存在 AppDelegate
中!
【讨论】:
以上是关于我可以将`willConnectTo`用作iOS中单窗口应用程序的`didFinishLaunching`吗?的主要内容,如果未能解决你的问题,请参考以下文章
iOS swiftDelegate 文件在添加代码时出现黑屏,请指导
Xcode iOS Simulator:我可以将鼠标用作假装 Apple Pencil 输入(在 iPad Pro 上)进行测试吗?
如何将 iPhone 用作 OS X、iOS 或 tvOS 的游戏控制器 [关闭]