我正在使用多个窗口设置我的应用程序。运作良好。但是,当我从跳板打开应用程序时,它会每次创建一个新窗口。
我正在使用最新的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代码,因为我首先显示了代码,尽管那是因为我还没有任何状态恢复。体现它并不会改变任何事情。
如果您有什么想法,我很高兴读给您!
答案 0 :(得分:1)
所以,自上周以来,我一直在寻找。今天,我决定对所有AppDelegate,SceneDelegate进行注释,并在Info.plist中仅保留一个场景配置。从默认模板重写AppDelegate和SceneDelegate以逐步挖掘。
它可以在第一次尝试使用默认模板时使用。我重写了所有相同的内容...仍然有效。
有问题吗? UIWindowSceneSessionRoleApplication数组的Info.plist中的“默认”配置为“项目1”,而不是“项目0”。 git隐藏所有内容,并且仅对其进行重新排序即可。
我希望这对某人有帮助。