0

我正在构建一个支持多个窗口的 macOS Catalyst 应用程序,该应用程序是通过UISceneDelegateiOS 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% 的时间应用程序的窗口没有正确设置,因为所需的信息没有userInfoUISceneSession.

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

4

2 回答 2

1

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

于 2020-10-21T05:27:12.093 回答
0

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

一旦你配置UISceneSession了特定的persistentIdentifierUIKit 将不会再次调用application(_:configurationForConnecting:options:)这个会话persistentIdentifier

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

于 2020-08-05T14:37:38.957 回答