检查连接并执行到第二个视图控制器的 segue

check connection and perform a segue to second view controller

我遇到了奇怪的事情,不明白为什么它不起作用。

我正在使用这个项目来检查互联网连接的类型。我的想法是检查连接并跳转到登录页面,或者如果设备未连接则留在第一个控制器上。

这是我的代码:

class ViewController: UIViewController {

    @IBOutlet weak var connectionTypeLabel: UILabel!

    @IBAction func test(_ sender: Any) {


        self.performSegue(withIdentifier: "showLogin", sender: self)


    }


    let status = Reach().connectionStatus()



    override func viewDidLoad() {
        super.viewDidLoad()




        self.connectionTypeLabel.text = ""

        switch self.status {
        case .unknown, .offline:

            self.connectionTypeLabel.text = "No Connected"

        case .online(.wwan):

            self.connectionTypeLabel.text = "Connected!"

            self.performSegue(withIdentifier: "showLogin", sender: self)            
        case .online(.wiFi):

            self.connectionTypeLabel.text = "Connected!"
            self.performSegue(withIdentifier: "showLogin", sender: self)        
        }


    }

我同时尝试了 viewDidLoad 和 viewWillAppear 方法。

我真的不明白为什么文本标签正确地改变了它的文本并且程序没有进入登录视图控制器。

我创建了一个测试按钮来检查 performSegue 函数是否正常工作并且它工作正常。我不知道为什么它在 viewDidLoad 方法中不起作用

尝试将您的支票移至 viewWillAppear,因为 performSegue 无法在 viewDidLoad 上正常工作并且调度时间会发生变化,例如:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.02, execute: {
     self.performSegue(withIdentifier: "showLogin", sender: self)  
})

更好的方法是转储 vc 并将检查代码移动到 didFinishLaunchingWithOptions 中的 AppDelegate,例如:

case .online(.wwan), .online(.wiFi):
   let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginVC")
   window?.rootViewController = loginVC
   window?.makeKeyAndVisible()

如果没有连接,请执行类似操作,但将 loginVC 更改为 noConnectionVC,您需要在情节提要中为您的 vc 提供一个标识符,以便在代码中对其进行初始化