【发布时间】:2016-04-08 22:16:26
【问题描述】:
我目前正在使用 Ashley Mill 的可达性类。如果应用程序通过网络连接启动,那么我可以在连接可用性之间切换而不会出现任何问题,并且能够正确显示网络连接警报控制器。但是,如果在应用程序在没有互联网连接/飞行模式下启动时启动应用程序,它会突然崩溃。
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 语句中捕捉到这一点并弹出错误消息?
【问题讨论】:
-
什么是崩溃消息和堆栈跟踪?
-
@Paulw11 消息结果是它试图解开一个 nil 值 - 我假设我可能只是不完全详细了解函数被调用的顺序,但目标是首先检查可达性,然后执行应用程序启动的其余部分。 :)
-
你应该设置一个异常断点来确定崩溃发生在哪一行,什么是nil。
-
@Paulw11 我遇到的是:第 51 行是我的 viewDidAppear 的右括号:如果我在那里设置断点,那么应用程序不会崩溃。如果我在第 52 行的空白行上设置断点,则应用程序崩溃并出现错误。 viewDidLoad 中的第一行是 setUpReachability 方法 - 可能是什么原因导致它无法阻止应用继续并显示警报?
-
但是你是否设置了异常断点而不是一行中的断点?进入断点导航器,添加断点并选择“异常”
标签: ios swift reachability reachability-swift