2016-09-23 72 views
0

當互聯網時,我似乎有麻煩導航到一個新的賽格。Swift:執行Segue沒有發射 - 沒有錯誤(可達性)

在互聯網連接的情況下我有這樣的:

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

當應用程序運行在瀏覽預期變爲綠色。正如你可以看到裏面還有功能internetEnabled()這哪裏是執行SEGUE是:

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

這是結果:

控制檯輸出:

可達標誌狀態:-R ------- networkStatusForFlags

正如你可以看到兩個打印工作,但它似乎跳過執行segue。

我已添加@IBAction func去到視圖控制器,當按鈕被點擊時,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?

更新

當設備

打開應用測試。 Segue不執行 關閉WiFi - >查看Go Yelloe 打開飛行模式 - >查看變爲紅色 關閉飛行模式並重新打開Wifi - Segue正常工作。

+0

哪裏是「準備forSegue」的方法? – Janmenjaya

+0

我添加了完整的ViewController。它在func中:internetEnabled() – JamesG

回答

0

這有點偏離主題,但在嘗試請求之前不要使用Reachability來檢測網絡是否處於聯機狀態。發出請求並處理錯誤。只有使用Reachability才能檢測網絡脫機後是否恢復聯機 - 在這種情況下,如果上次請求導致錯誤,請重試。

這篇文章解釋了它在更詳細一點:Reachability responding with wrong status code in iOS 7 iphone 5