Делегат приложения должен реализовать свойство окна, если он хочет использовать основной файл раскадровки - PullRequest
1 голос
/ 25 февраля 2020

Я уже перепробовал все решения, которые смог найти в stackoverflow, и ни одно из них не работает.

Это мой текущий файл AppDelegate.swift, я думаю, что я реализую свойство окна , так или иначе:

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.
    window = UIWindow()
    window?.makeKeyAndVisible()
    let mainVC = UIViewController()
    window?.rootViewController = mainVC

    return true
}

// MARK: UISceneSession Lifecycle
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    // Called when a new scene session is being created.
    // Use this method to select a configuration to create the new scene with.
    window = UIWindow()
          window?.makeKeyAndVisible()
          let mainVC = UIViewController()
          window?.rootViewController = mainVC
    return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
    // 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.
    window = UIWindow()
          window?.makeKeyAndVisible()
          let mainVC = UIViewController()
          window?.rootViewController = mainVC
}

}

Что может происходить, так что предупреждение все еще появляется, и мое приложение продолжает показывать черный экран?

Ответы [ 4 ]

2 голосов
/ 25 февраля 2020

Пошаговое руководство.

  1. 1-й удалить SceneDelegate файл из проекта.
  2. Добавить var window: UIWindow? в AppDelegate.
  3. Удалить ниже забавного c из AppDelegate.

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }
    
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // 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.
    }
    
  4. Удалить Манифест сцены приложения ключ от Info.plist файл.


Дополнительно

Добавить методы делегата ниже в AppDelegate файл, ниже didFinishLaunchingWithOptions

    func applicationWillResignActive(_ application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
1 голос
/ 03 мая 2020

Я только что добавил var window: UIWindow? в класс AppDelegate, проблема исправлена.

0 голосов
/ 23 апреля 2020

Когда вы создаете новый проект в Xcode 11.4 и выше, вы создаете структуру каталогов проекта с файлами SceneDelegate.

, если вы пытаетесь запустить проект, вы получить ошибку.

Шаг 1: Удалить SceneDelegate.h & SceneDelegate.m

Шаг 2: В AppDelegate.h создать свойство окна.

@property (strong, nonatomic) UIWindow *window;

Шаг 3: В основной раскадровке установите идентификатор раскадровки для ViewController.

enter image description here

и добавить окно установки в методе didFinishLaunchingWithOptions appdelegate.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];

return YES;

Для Swift: используйте код ниже

@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
}

}

Примечание. Не добавляйте окно внутри метода didFinishLaunchingWithOptions для swift.

0 голосов
/ 25 февраля 2020

Если вы разрабатываете приложение Objective C и сталкиваетесь с этой ошибкой, выполните те же шаги, как указано выше, только с изменением в шаге 1. Добавьте @property (nonatomi c, сохраните) IBOutlet UIWindow window; до AppDelegate.h

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...