我正在构建一个支持多窗口的macOS Catalyst应用程序,它是使用iOS 13中引入的新的UISceneDelegate app集实现的。
根据Apple's documentation的说法,在创建新窗口时,场景代理需要连接到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
)
}查看此函数的the Developer Reference page,似乎应该总是在应用程序启动时在主应用程序的场景设置之前调用它。不幸的是,对于macOS Catalyst,这似乎不是真的,但我找不到任何文档或逻辑来解释为什么这个函数不总是被调用。在我的应用程序中,它重用了UISceneDelegate的简单示例代码,这个函数在应用程序启动时随机调用的时间约为50%。这并不好,因为这意味着随机地有50%的时间应用程序的窗口没有正确设置,因为所需的信息没有传递到UISceneSession的userInfo属性中。
调用application(_:configurationForConnecting:options:)的确切逻辑是什么,或者如何在使用macOS催化剂的第一个应用场景中强制在应用启动时确定地调用它?
发布于 2020-10-21 13:27:12
这并不是Catalyst所特有的--它也发生在iOS中。它与窗口恢复和创建有关。要理解这一点,请看我对这个更一般的问题的回答:Why is UIApplicationDelegate method application(\_:configurationForConnecting:options:) not called reliably
发布于 2020-08-05 22:37:39
即使在iOS中也不能调用它,不仅仅是在Mac Catalyst中
一旦您使用特定的persistentIdentifier配置了UISceneSession,UIKit将不会再次为使用此persistentIdentifier的会话调用application(_:configurationForConnecting:options:)。
UIKit在创建新 scene
前不久调用此方法
https://stackoverflow.com/questions/60920713
复制相似问题