Я столкнулся с проблемой в бета-версии Xcode 11.
Проблема в том, что я не получаю переменную window
по умолчанию, объявленную в AppDelegate
файле.
Кто-нибудь сталкивается с такой же проблемой?
Я столкнулся с проблемой в бета-версии Xcode 11.
Проблема в том, что я не получаю переменную window
по умолчанию, объявленную в AppDelegate
файле.
Кто-нибудь сталкивается с такой же проблемой?
В Xcode 11 это теперь делается в SceneDelegate
РЕДАКТИРОВАТЬ: если вы все еще поддерживаете iOS 12 или более раннюю версию (или хотите поддерживать 13 и более раннюю версию)
Добавьте UIWindowSceneDelegate
в ApplicationDelegate
Добавить: var window:UIWindow?
Затем продолжайте, как вы делали настройку в didFinishLaunching
AppDelegate
.
- person dfd; 06.08.2019
Окно var по умолчанию: UIWindow? Теперь перемещен в SceneDelegate.swift. Чтобы установить rootViewController в Xcode 11, вы можете работать в файле SceneDelegate.swift. В делегате сцены вы должны создать экземпляр окна и корневой контроллер представления, как показано ниже:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// set or create your viewController here
let yourViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(identifier: "yourViewController") as! YourViewController
// set the rootViewController here using window instance
self.window?.rootViewController = yourViewController
}
Также полезен этот ответ: Почему вручную настраивается корневой вид контроллер показывает черный экран?
Надеюсь, это поможет вам!
Мой подход:
сначала в AppDelegate создайте статическое свойство с классом контроллера представления, к которому вы хотите получить доступ, например
class AppDelegate: UIResponder, UIApplicationDelegate {
// MARK: Home
static var homeViewController: HomeViewController?
...
}
затем в контроллере представления
// MARK: - Managing the view
override func viewDidLoad() {
super.viewDidLoad()
// Singleton
AppDelegate.homeViewController = self
...
}
как использовать:
extension UIViewController {
var homeViewController: HomeViewController? {
if let controller = self as? HomeViewController {
return controller
}
return AppDelegate.homeViewController
}
}
В моем случае это все, что нужно.
var window: UIWindow? // add this by yourself
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: Device.bounds)
let root = DDTabBarController()
window?.rootViewController = root
window?.makeKeyAndVisible()
return true
}
UIApplicationDelegate
уже определяет свойствоwindow
.UIApplication.shared.delegate?.window
. - person rmaddy   schedule 15.06.2019