首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:执行分段不触发-无错误(可达性)

问Swift:执行分段不触发-无错误(可达性)
EN

Stack Overflow用户
提问于 2016-09-23 01:05:47
回答 1查看 193关注 0票数 0

当有互联网的时候,我似乎很难导航到一个新的航海家。

就互联网连接而言,我有以下几点:

代码语言:javascript
复制
case ReachableViaWiFi:
view.backgroundColor = .green
internetEnabled()

当应用程序运行时,View会像预期的那样变成绿色。如您所见,还有一个函数internetEnabled(),它是执行segue的位置:

代码语言:javascript
复制
func internetEnabled() {
    print("1")
    self.performSegue(withIdentifier: "InternetSegue", sender: self)
    print("2")
}

其结果是:

控制台输出:

可达旗状态:-R ? networkStatusForFlags。 1 2

正如您可以看到的,这两个打印工作,但它似乎跳过了表演segue。

我在视图控制器中添加了@IBAction ,当单击按钮时,导航到正确的ViewController。

全ViewController.Swift

代码语言:javascript
复制
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")
}

}

问题

当有互联网的时候,有人能帮我实现这个功能吗?

更新

在设备上测试时

打开应用程序。不执行关闭,WiFi,->,视图,黄色,在飞机模式->视图,红色关闭飞机模式,并打开Wifi返回-分段工程。

EN

回答 1

Stack Overflow用户

发布于 2016-09-23 18:29:46

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39651052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档