繁体   English   中英

macOS Catalyst configurationForConnecting UISceneSession 委托函数并不总是在应用程序启动时调用

[英]macOS Catalyst configurationForConnecting UISceneSession delegate function not always called on app launch

我正在构建一个支持多个窗口的 macOS Catalyst 应用程序,它是使用 iOS 13 中引入的新UISceneDelegate 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% 的时间应用程序的窗口没有正确设置,因为UISceneSessionuserInfo属性中没有传递所需的信息。

调用application(_:configurationForConnecting:options:)的确切逻辑是什么,或者如何强制在使用 macOS Catalyst 的第一个应用程序场景的应用程序启动时确定性地调用它?

这不是 Catalyst 特有的 - 它也发生在 iOS 中。 这与窗口恢复创建有关 要理解这一点,请参阅我对这个更通用的问题的回答: Why is UIApplicationDelegate method `application(_:configurationForConnecting:options:)` 不可靠调用

即使在iOS中也无法调用,不仅是Mac Catalyst

一旦您使用特定的persistentIdentifier配置了UISceneSession ,UIKit 将不会再次使用这个persistentIdentifier为会话调用application(_:configurationForConnecting:options:)

UIKit 在创建场景前不久调用此方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM