2016-08-05 1 views
2

큰 문제가 있습니다. Xcode 8 Beta 3 및 Swift를 사용하는 앱에서 연결 가능성을 구현하려고합니다.Xcode 8 e Swift 3의 연결 가능성 버그

사용자가 인터넷 (Wi-Fi 또는 4G)을 사용하는 경우 배경이 녹색으로 바뀝니다. 배경이 아닐 경우 빨간색으로 표시됩니다. 사용자가 셀룰러에서 인터넷에 액세스하는 경우 배경이 노란색으로 표시됩니다.

이 코드는 잘 실행하지만 무선 랜을 끄면, 여기

내 GitHub의 프로젝트를 나누기 - 내 "단일보기 응용 프로그램"당신은 당신의 방법 선택기를 수정해야

https://github.com/ewersoncastelo/testReachabilityXcode8

+0

https://www.dropbox.com/s/dtwfbjsl90f8bwx/testReachabilityXcode8-Part1.zip?dl=1 –

+0

@LeoDabus 확인. 시간 내 주셔서 감사합니다. 나중에이 코드 – Ewerson

+1

을 사용해 보겠습니다. 고맙습니다. – Ewerson

답변

4

을 . 이렇게 해봐.

AppDelegate에

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     reachability = Reachability.forInternetConnection() 
     reachability.startNotifier() 
     return true 
    } 
    func applicationWillResignActive(_ application: UIApplication) { 
     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
     // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 
    } 
    func applicationDidEnterBackground(_ application: UIApplication) { 
     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
    } 
    func applicationWillEnterForeground(_ application: UIApplication) { 
     // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 
    } 
    func applicationDidBecomeActive(_ application: UIApplication) { 
     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    } 
    func applicationWillTerminate(_ application: UIApplication) { 

    } 
} 

보기 컨트롤러

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) 

    } 

    func updateInterfaceWithCurrent(networkStatus: NetworkStatus) { 
     switch networkStatus { 
     case NotReachable: 
      view.backgroundColor = .red 
      print("No Internet") 
     case ReachableViaWiFi: 
      view.backgroundColor = .green 
      print("Reachable Internet") 
     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. 
    } 
} 
+0

그것이 작동했지만, 도달 가능성 h 및 m 클래스를 추가해야한다고 지정하는 것을 잊지 마십시오. –