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 不触发 - 无错误(可达性)的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue