我正在构建一个支持多个窗口的 macOS Catalyst 应用程序,该应用程序是通过UISceneDelegate
iOS 13 中引入的新 API 集实现的。
根据Apple 的文档,在创建新窗口时,需要连接到场景委托UISceneSession
,这允许通过其userInfo
属性将信息传递给该会话。userInfo
在连接场景委托之前设置的一种方法是在以下功能中UISceneDelegate
:
func application(
_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions
) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
connectingSceneSession.userInfo?["foo"] = "bar"
return UISceneConfiguration(
name: "Default Configuration",
sessionRole: connectingSceneSession.role
)
}
查看此功能的开发人员参考页面,似乎应该始终在应用程序启动时调用它,然后再设置主应用程序的场景。不幸的是,对于 macOS Catalyst,这似乎不是真的,但我找不到任何文档或逻辑来解释为什么不总是调用这个函数。在我的应用程序中,它重用了简单的示例代码UISceneDelegate
,这个函数在应用程序启动时大约有 50% 的时间被随机调用。这不是很好,因为这意味着随机 50% 的时间应用程序的窗口没有正确设置,因为所需的信息没有userInfo
在UISceneSession
.
application(_:configurationForConnecting:options:)
调用macOS Catalyst 的第一个应用程序场景的调用或如何强制在应用程序启动时确定性地调用它的确切逻辑是什么?