Swift:执行 Segue 不触发 - 无错误(可达性)

Posted

技术标签:

【中文标题】Swift:执行 Segue 不触发 - 无错误(可达性)【英文标题】:Swift: Perform Segue not firing - No Errors (Reachability) 【发布时间】:2016-09-23 01:05:47 【问题描述】:

当有互联网时,我似乎无法导航到新的 segue。

对于互联网连接,我有这个:

case ReachableViaWiFi:
view.backgroundColor = .green
internetEnabled()

当应用运行时,视图按预期变为绿色。如您所见,还有函数 internetEnabled() 是执行 segue 的地方:

func internetEnabled() 
    print("1")
    self.performSegue(withIdentifier: "InternetSegue", sender: self)
    print("2")

这是结果:

控制台输出:

可达性标志状态:-R -------- networkStatusForFlags

1

2

正如您所见,两种打印都有效,但似乎跳过了执行转场。

我已将 @IBAction func go 添加到视图控制器,当单击按钮时,segue 导航到正确的 ViewController。

完整的 ViewController.Swift

import UIKit
import SystemConfiguration

var reachability = Reachability()

class ViewController: UIViewController 

override func viewDidLoad() 
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(reachabilityStatusChanged(_:)), name: .reachabilityChanged, object: nil)



@IBAction func go(_ sender: AnyObject) 
    performSegue(withIdentifier: "InternetSegue", sender: self)


func updateInterfaceWithCurrent(networkStatus: NetworkStatus) 
    switch networkStatus 
    case NotReachable:
        view.backgroundColor = .red
        print("No Internet")
    case ReachableViaWiFi:
        view.backgroundColor = .green
        internetEnabled()
    case ReachableViaWWAN:
        view.backgroundColor = .yellow
        print("Reachable Cellular")
    default:
        return
    


override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    //
    updateInterfaceWithCurrent(networkStatus: reachability.currentReachabilityStatus())


func reachabilityStatusChanged(_ sender: NSNotification) 
    guard let networkStatus = (sender.object as? Reachability)?.currentReachabilityStatus() else  return 
    updateInterfaceWithCurrent(networkStatus: networkStatus)

override func viewWillDisappear(_ animated: Bool) 
    NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: nil)

override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.


func internetEnabled() 
    print("1")
    performSegue(withIdentifier: "InternetSegue", sender: self)
    print("2")



问题

有人可以帮我在有互联网时使用此功能执行转场吗?

更新

在设备上测试时

打开应用程序。 Segue 不执行 关闭 WiFi -> 查看 Goes Yelloe 打开飞行模式->查看变红 关闭飞行模式并重新打开 Wifi - Segue 有效。

【问题讨论】:

“prepare forSegue”方法在哪里?? 我添加了完整的 ViewController。它在函数中:internetEnabled() 【参考方案1】:

这有点离题,但在尝试请求之前不要使用可达性来检测网络是否在线。发出请求并处理错误。仅使用 Reachability 来检测网络在离线后是否恢复在线 - 在这种情况下,如果您的最后一个请求导致错误,请重试。

这篇文章更详细地解释了它:Reachability responding with wrong status code in ios 7 iphone 5

【讨论】:

以上是关于Swift:执行 Segue 不触发 - 无错误(可达性)的主要内容,如果未能解决你的问题,请参考以下文章

展开 segue 不触发

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue

Swift:如果条件不满足,则继续执行 segue

Swift - 从地图注释中执行 Segue

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil

人工触发 Segue