我知道UISceneDelegate scene(_:openURLContexts:)
委托方法意味着与UIScene
委托方法等效的UIApplicationDelegate application(_:open:options:)
。但是一个应用程序可以有多个活动场景,而一次只能调用一个委托,而且它似乎总是“第一个”场景。
是否存在任何条件或动作会导致特定场景(而不仅仅是“第一个”场景)被其openURLContexts
委托调用,或者结果证明这是一个有缺陷的设计吗?我想念什么?
让我用一个例子来阐明情况。
您有一个支持iPadOS中多个场景的应用程序。用户正在为您的应用程序积极使用两个并排场景。甚至在后台可能会有一些断开的场景。无论哪种方式,都假设有多个场景。
让我们说您的应用程序可以打开某些类型的文件。用户从您的应用程序切换到“文件”应用程序,或几乎所有允许您共享文件的应用程序。在另一个应用程序中,选择一个文件,然后选择使用(多场景)应用程序将其打开。
这时,您的应用将放回前台,并且仅在应用中当前活动的场景之一上调用openURLContexts
委托。
如果您的应用程序支持自定义URL方案并且通过其自定义URL方案启动(或重新启动),则会出现相同的问题。
那么在场景委托人身上完成的目的是什么?有多个场景。该代表只有一个被呼叫。根据您的应用程序的需求,您可能只想在一个特定场景中处理此文件,但可能不是调用其委托的场景。您需要编写代码来遍历现有场景,并确定哪个场景应该实际处理文件,而不管调用了哪个场景。
鉴于此,仅调用UIApplicationDelegate
来处理打开的URL请求不是更好吗?或者,正如我在第二段中最初提出的问题中所述,是否有条件在特定场景下呼叫代表?