应用程序在飞行模式下启动时崩溃

时间:2016-04-08 22:16:26

标签: ios swift reachability reachability-swift

我目前正在使用Ashley Mill的Reachability Class。如果应用程序启动时具有网络连接,那么我可以在没有任何问题的情况下切换连接可用性,并能够正确显示网络连接警报控制器。但是,如果应用程序在应用程序启动时启动而没有互联网连接/飞机模式,它会突然崩溃。

override func viewDidLoad()
{
    super.viewDidLoad()

    setUpReachability (nil)
}

func setUpReachability(hostName: String?)
{
    do
    {
        let  reachability = try hostName == nil ? Reachability.reachabilityForInternetConnection() : Reachability(hostname: hostName!)
        self.reachability = reachability
        try! self.reachability?.startNotifier()
    }
    catch ReachabilityError.FailedToCreateWithAddress(let address)
    {
        print("\(address)")
        return
    } catch {}

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.reachabilityChanged(_:)), name: ReachabilityChangedNotification, object: reachability)
}

func reachabilityChanged(notification: NSNotification)
{
    let reachability = notification.object as! Reachability

    if  reachability.isReachable()
    {
        if reachability.isReachableViaWiFi()
        {
            connected = true
        }
        else
        {
            connected = true
        }
    }
    else
    {
        let alert = UIAlertController( title: "No Network Connection Available", message:"Try Again", preferredStyle: .Alert)
        alert.addAction(UIAlertAction( title: "Will Do!"  , style: .Default) { _ in } )
        presentViewController        ( alert, animated: true               ) {}
        connected = false
    }
}

可以做些什么来让iPhone应用程序启动并显示警告,说没有网络连接而不是突然崩溃?

错误讯息:

  

致命错误:在解包可选值时意外发现nil

但我认为可更改性会在else语句中捕获并弹出错误消息吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

不应该在reachability.isReachableViaWiFi()中的else if语句为:connected = false?

答案 1 :(得分:0)

错误在于我实际上是在尝试在应用程序启动时下载数据,而不是首先允许应用程序的初始化完成,然后向服务器发送请求以访问信息。