【发布时间】:2019-11-23 10:14:55
【问题描述】:
我在 Xcode 11.1 中创建了 iOS 项目。我需要从应用程序中删除场景委托。
【问题讨论】:
我在 Xcode 11.1 中创建了 iOS 项目。我需要从应用程序中删除场景委托。
【问题讨论】:
您需要执行以下步骤:
如果 AppDelegate 中不存在var window:UIWindow?,您还需要添加它
【讨论】:
didFinishLaunchingWithOptions 不再被调用
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
}
}
【讨论】:
要添加到已接受的答案:您还需要在 AppDelegate 中写下:
self.window = UIWindow(frame: UIScreen.main.bounds)
let controller = MyRootViewController()
window?.rootViewController = controller
window?.makeKeyAndVisible()
【讨论】:
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
}
}
【讨论】:
以防万一您在Objective-C 中进行开发,请在AppDelegate.h 文件中添加window 属性,如下所示:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
无需初始化window。它会自动运行。
【讨论】:
SceneDelegate.swift文件Info.plist 文件中删除Application Scene Manifest
var window: UIWindow? 添加到 AppDelegate.swift@main 替换为@UIApplicationMain
AppDelegate中的UISceneSession Lifecycle(函数)
【讨论】: