Вызывается ли когда-либо метод сцены UISceneDelegate (_:openURLContexts:) для конкретной сцены или только "первый"?
Я знаю что UISceneDelegate scene(_:openURLContexts:)
делегат подразумевается как UIScene
эквивалент UIApplicationDelegate application(_:open:options:)
делегат метод. Но приложение может иметь несколько активных сцен, в то время как только одна будет вызывать этого делегата за раз, и это всегда кажется "первой" сценой.
Есть ли какое-либо условие или действие, которое приведет к тому, что конкретная сцена (а не только "первая") получит свое openURLContexts
позвонил делегат или это оказалось неправильным дизайном? Что мне не хватает?
Разрешите пояснить ситуацию на примере.
У вас есть приложение, которое поддерживает несколько сцен в iPadOS. Пользователь активно использует две параллельные сцены для вашего приложения. На заднем плане могут быть даже отдельные сцены. В любом случае, предположим, что есть несколько сцен.
Предположим также, что ваше приложение может открывать файлы определенных типов. Пользователь переключается с вашего приложения на приложение "Файлы" или любое другое приложение, которое позволяет вам делиться файлом. В другом приложении вы выбираете файл и решаете открыть его в своем (многосценном) приложении.
На этом этапе ваше приложение снова выводится на передний план, а openURLContexts
делегат вызывается только в одной из текущих активных сцен в вашем приложении.
Та же проблема возникает, если ваше приложение поддерживает настраиваемую схему URL-адресов и ваше приложение запускается (или возвращается на передний план) через его настраиваемую схему URL-адресов.
Так в чем же смысл этого делать на сцене делегата? Есть несколько сцен. Вызывается только один делегат. В зависимости от потребностей вашего приложения вы, вероятно, захотите обрабатывать этот файл только в одной конкретной сцене, но это может быть не та сцена, делегат которой был вызван. Вам нужно написать код, чтобы просмотреть существующие сцены и определить, какая из них должна действительно обрабатывать файл, независимо от вызываемой сцены.
Учитывая это, не лучше было бы просто позвонить в UIApplicationDelegate
обработать открытый URL-запрос? Или, как указано в моем первоначальном вопросе во втором абзаце, существуют ли условия, которые вызывают делегата в определенной сцене?