簡體   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