每次点按应用图标时,iOS 13应用都会请求一个新场景

时间:2019-08-30 22:24:35

标签: ios swift ios13 ipados uiscene

我正在使用多个窗口设置我的应用程序。运作良好。但是,当我从跳板打开应用程序时,它会每次创建一个新窗口。

我正在使用最新的Xcode和iPadOS 13.0 Beta。我所有的视图控制器,视图等都是以编程方式进行的。我唯一的故事板是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的Gallery示例中,如果打开应用程序,滑动到主屏幕,然后再次打开应用程序,我将回到原来的位置,而无需再次调用scene(_:willConnectTo)。在我自己的应用程序上,每次打开应用程序时都会调用scene(_:willConnectTo),并且通过设置断点可以使我确实在每次启动时都会收到不同的UIScene和UISceneSession对象。

我没有显示任何NSUserActivity代码,因为我首先显示了代码,尽管那是因为我还没有任何状态恢复。体现它并不会改变任何事情。

如果您有什么想法,我很高兴读给您!

1 个答案:

答案 0 :(得分:1)

所以,自上周以来,我一直在寻找。今天,我决定对所有AppDelegate,SceneDelegate进行注释,并在Info.plist中仅保留一个场景配置。从默认模板重写AppDelegate和SceneDelegate以逐步挖掘。

它可以在第一次尝试使用默认模板时使用。我重写了所有相同的内容...仍然有效。

有问题吗? UIWindowSceneSessionRoleApplication数组的Info.plist中的“默认”配置为“项目1”,而不是“项目0”。 git隐藏所有内容,并且仅对其进行重新排序即可。

我希望这对某人有帮助。