Быстрое открытие / закрытие приложения заставляет ViewController появляться более одного раза - PullRequest
0 голосов
/ 08 сентября 2018

У меня возникают проблемы, когда при закрытии и закрытии приложения один и тот же ViewController появляется дважды. Приложение настроено таким образом, что, когда пользователь «закрывает и открывает» приложение, оно переносит их в «PIN-код» ViewController, где они вводят свой PIN-код. Проблема в том, что когда пользователь получает «PIN-код» ViewController, ViewController появляется дважды. Как мне сделать так, чтобы это условие не возникало? Кроме того, как только пользователь вводит «PIN-код», как мне сделать так, чтобы пользователь мог вернуться на страницу, на которой он находился в последний раз, перед «закрытием и последующим открытием» приложения?

Код в приложении «Удалить», позволяющий пользователю переходить к «PIN» ViewController при «открытии и закрытии» приложения:

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

        DispatchQueue.global(qos: .background).async {
            print("This is run on the background queue")


            DispatchQueue.main.async {
                print("This is run on the main queue, after the previous code in outer block")

                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                appDelegate.window = UIWindow(frame: UIScreen.main.bounds)
                let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                let yourVC = mainStoryboard.instantiateViewController(withIdentifier: "PINViewController") as! PINViewController

                appDelegate.window?.rootViewController = yourVC
                appDelegate.window?.makeKeyAndVisible()
            }
        }
    }

1 Ответ

0 голосов
/ 08 сентября 2018

1- Вы должны удалить оба из

DispatchQueue.global(qos: .background).async
DispatchQueue.main.async

, поскольку код по умолчанию находится в главном потоке

2- Код внутри

applicationWillEnterForeground

будет вызываться, например, когда вы нажимаете кнопку «Домой» и снова открываете приложение, и это не приложение закрывается, это приложение работает в фоновом режиме

3- Используйте UINavigationController, чтобы вернуть VC для возврата к нему

let nav = ////
nav.viewControllers = [vc1,vc2]
appDelegate.window?.rootViewController = nav

, так что vc2 покажет, и с помощью back вы можете вернуться к vc1

...