Приложение iOS 13 запрашивает новую сцену каждый раз при нажатии значка приложения

Я настраиваю свое приложение с несколькими окнами. Работает хорошо. Но когда я открываю свое приложение с трамплина, оно каждый раз создает новое окно.

Я нахожусь на последних бета-версиях Xcode & iPadOS 13.0. Все мои viewcontrollers, представления и т. Д. Сделаны программно. Моя единственная раскадровка - LaunchScreen.

Info.plist

<key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <true/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UISceneConfigurationName</key>
                    <string>Default</string>
                    <key>UISceneDelegateClassName</key>
                    <string>ComicReader.SceneDelegate</string>
                </dict>
            </array>
        </dict>
    </dict>

AppDelegate.swift

func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    UISceneConfiguration(name: "Default", sessionRole: connectingSceneSession.role)
}

SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let scene = scene as? UIWindowScene else { return }

        window = UIWindow(windowScene: scene)
        window?.rootViewController = DelegateHelper.rootViewController()
        window?.makeKeyAndVisible()
    }
}

В образце галереи Apple, если откройте приложение, проведите пальцем до главного экрана, а затем снова откройте приложение, я вернулся на свое место, не вызывая scene(_:willConnectTo) очередной раз. В моем собственном приложении scene(_:willConnectTo) вызывается каждый раз, когда я открываю приложение, и установка точек останова показывает, что я действительно получаю разные объекты UIScene & UISceneSession при каждом запуске.

Я не показывал никакого кода NSUserActivity, потому что я сначала это сделал, потому что у меня еще не было восстановления состояния. Реализация этого ничего не меняет.

Если у вас есть идеи, я буду рад вас прочитать!

1 ответ

Итак, я ищу это с прошлой недели. Сегодня я решил прокомментировать все свои AppDelegate, SceneDelegate и сохранить только одну конфигурацию сцены в Info.plist. Перепишите AppDelegate и SceneDelegate из шаблона по умолчанию для постепенного изменения.

Он работает с первой попытки с шаблоном по умолчанию. Я переписываю все идентично… все еще работает.

Проблема? Конфигурация по умолчанию в Info.plist в массиве UIWindowSceneSessionRoleApplication была "Элемент 1", а не "Элемент 0". Git спрятать все и только изменить порядок, который сделал это тоже работает.

Я надеюсь, что это поможет кому-то.

Другие вопросы по тегам