如何从 iOS 应用程序中删除场景委托?

Posted

技术标签:

【中文标题】如何从 iOS 应用程序中删除场景委托?【英文标题】:How to remove Scene Delegate from iOS Application? 【发布时间】:2019-11-23 10:14:55 【问题描述】:

我在 Xcode 11.1 中创建了 ios 项目。我需要从应用程序中删除场景委托。

【问题讨论】:

【参考方案1】:

您需要执行以下步骤:

    从 App Delegate 中移除 Scene 委托方法并删除 Scene 委托文件。 您需要从 Info.plist 中删除 UIApplicationSceneManifest。

如果 AppDelegate 中不存在var window:UIWindow?,您还需要添加它

【讨论】:

使用Objecitve C,我们需要在AppDelegate中添加一个window属性 添加了相同的内容。谢谢 带图指南***.com/a/60329391/4026902 在我的情况下不起作用,didFinishLaunchingWithOptions 不再被调用 由于 SceneDelegate 导致协调器模式无法正常工作,谢谢【参考方案2】:

Xcode(带storyboard)生成空项目的完整解决方案

    删除SceneDelegate.swift文件 从Info.plist 文件中删除Application Scene Manifest 将此代码粘贴到您的 AppDelegate.swift 文件中

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window:UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
        self.window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
        window?.makeKeyAndVisible()

        return true
    

【讨论】:

【参考方案3】:

要添加到已接受的答案:您还需要在 AppDelegate 中写下:

 self.window = UIWindow(frame: UIScreen.main.bounds)
 let controller = MyRootViewController()
 window?.rootViewController = controller
 window?.makeKeyAndVisible()

【讨论】:

【参考方案4】:

添加到milzi's answer

    删除 SceneDelegate.swift 文件 从 Info.plist 文件中删除应用场景清单 从 AppDelegate 类中移除 UISceneSession 生命周期函数 在您的 AppDelegate 类中添加 var window: UIWindow? 作为实例属性 将@main属性替换为@UIApplicationMain属性(这保存为手动创建和分配窗口)

以下是更改后 AppDelegate 的外观:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
        // Override point for customization after application launch.
        return true
    



【讨论】:

【参考方案5】:

以防万一您在Objective-C 中进行开发,请在AppDelegate.h 文件中添加window 属性,如下所示:

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

无需初始化window。它会自动运行。

【讨论】:

【参考方案6】:
    删除SceneDelegate.swift文件 从Info.plist 文件中删除Application Scene Manifestvar window: UIWindow? 添加到 AppDelegate.swift 将@main 替换为@UIApplicationMain 删除AppDelegate中的UISceneSession Lifecycle(函数)

【讨论】:

以上是关于如何从 iOS 应用程序中删除场景委托?的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用程序委托中获取 iOS 应用程序中的活动视图?

如何从应用程序委托、情节提要、iOS6 获取我的视图控制器的实例

iOS上传后如何删除压缩视频?

iOS:如何从设备中完全删除应用程序以进行调试

不知道如何在 iOS 上从我的应用委托访问视图对象

iOS循环引用常见场景和解决办法