Как отправить данные из AppDelegate в мой подкласс ViewController в Swift 4 - PullRequest
0 голосов
/ 08 мая 2018

Я использую Swift 4.1, и мне интересно, как передать данные URL, которые приведены здесь:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
}

в мой подкласс UIViewController, который я назвал HotSpotRISViewController.Вот что я попытался сделать:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let vc = HotSpotRISViewController()
    vc.setURL(theURL: url)
    let navigationController = UINavigationController(rootViewController: vc)
    self.window!.rootViewController = navigationController

}

Мой HotSpotRISViewController содержит эту функцию:

func setURL(theURL: URL) {
    self.url = theURL
    print(self.url ?? "nil")
}

Внутри моего HotSpotRISViewController у меня есть свойство типа URL, готовое к установке.Приведенный выше код правильно передает информацию, потому что мой оператор печати печатает URL, но вместо моего приложения появляется черный экран.Что мне не хватает?И затем, с другой стороны, следующее заставляет приложение запускаться правильно, но я не знаю, как передать данные URL, используя этот метод:

func application(_ app: UIApplication, open url: URL,
                    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController = mainStoryboard.instantiateInitialViewController()
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()
}

Мне интересно, как я могу получить оба приложенияправильно запустился без черного экрана и передал данные url.Спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете добавить глобальную переменную в файл appDelegate и извлечь ее с помощью функции setURL:

В вашем AppDelegate.swift

    var myurl: URL!
    ....

    func application(_ app: UIApplication, open url: URL,
                options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
        self.myurl = url
        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = mainStoryboard.instantiateInitialViewController()
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    }
    ...

В вашем HotSpotRISViewController.swift

func setURL(theURL: URL) {
    DispatchQueue.main.async {
        if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
            self.url = appDelegate.myurl
        }
    }
...