如何删除SceneDelegate

Xcode11之后新创建的工程会多出两个文件SceneDelegate。那么我们如何让它变回之前的那样的工程呢。

  • 一、将这两个文件删除。
    会报错There is no scene delegate set. A scene delegate class must be specified to use a main storyboard file.
  • 二、将Info.plist -> Open As -> Source Code将划框的部分删除。
    在这里插入图片描述
  • 三、将AppDelegate.m中的UISceneSession lifecycle注释掉或者删掉。
#pragma mark - UISceneSession lifecycle

- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
    // Called when a new scene session is being created.
    // Use this method to select a configuration to create the new scene with.
    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}

- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
    // Called when the user discards a scene session.
    // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
    // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
  • 四、在didFinishLaunchingWithOptions中加入UIWindow
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    self.window.rootViewController = [[ViewController alloc] init];;
    
    [self.window makeKeyAndVisible];
    return YES;
}

AppDelegate.h中加入@property (strong, nonatomic) UIWindow *window;
这样就又回到我们熟悉的代码了。

swiftAppDelegatewindow

    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.backgroundColor = UIColor.white
        
        self.window?.rootViewController = ViewController()
        self.window?.makeKeyAndVisible()
        
        return true
    }
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`SceneDelegate` 是 iOS 13 引入的新特性,用于管理多场景(multi-scene)应用程序的生命周期和状态。每个场景都代表一个应用程序窗口和相关的视图控制器层次结构。 在使用 `SceneDelegate` 之前,我们需要先创建一个基于 `UIKit` 的应用程序模板。在 Xcode 11 中创建一个新的项目时,默认会自动生成 `SceneDelegate.swift` 文件。如果没有自动生成,可以手动创建。 然后,在 `AppDelegate.swift` 文件中,需要将应用程序的生命周期方法移动到新的 `SceneDelegate.swift` 文件中。例如,将 `application(_:didFinishLaunchingWithOptions:)` 方法移动到 `SceneDelegate.swift` 文件中: ```swift class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Create a new UIWindow instance guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) // Set the root view controller of the window let viewController = ViewController() window?.rootViewController = viewController // Make the window visible window?.makeKeyAndVisible() } // other SceneDelegate methods } ``` 在 `scene(_:willConnectTo:options:)` 方法中,我们需要创建一个新的 `UIWindow` 实例,并设置其根视图控制器。最后,通过调用 `makeKeyAndVisible()` 方法,使窗口可见。 最后,在 `Info.plist` 文件中,需要添加一个新的键值对,以启用多场景支持。在 `Application Scene Manifest` 中添加一个 `Session Role` 为 `UIWindowSceneSessionRoleApplication` 的项。 ```xml <key>UIApplicationSceneManifest</key> <dict> <key>UISceneConfigurations</key> <dict> <key>UIWindowSceneSessionRoleApplication</key> <array> <dict> <key>UISceneConfigurationName</key> <string>Default Configuration</string> <key>UISceneDelegateClassName</key> <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> <key>UISceneStoryboardFile</key> <string>Main</string> </dict> </array> </dict> </dict> ``` 现在,我们已经成功地启用了多场景支持,并将应用程序的生命周期方法移动到了 `SceneDelegate.swift` 文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值