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

Posted

技术标签:

【中文标题】应用程序在飞行模式下启动时崩溃【英文标题】:App crashes on Launch in Airplane Mode 【发布时间】: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 方法 - 可能是什么原因导致它无法阻止应用继续并显示警报? 但是你是否设置了异常断点而不是一行中的断点?进入断点导航器,添加断点并选择“异常” 【参考方案1】:

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

【讨论】:

您所指的 else 语句是蜂窝网络的可达性。因此,如果网络连接是.reachable - 它如何通过 wifi 访问,否则它的蜂窝网络或如果它无法访问,则向用户显示警报:D【参考方案2】:

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

【讨论】:

以上是关于应用程序在飞行模式下启动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

具有 Objective-C 和 swift 代码的应用程序在发布模式下启动时崩溃,调试模式正常

Android 应用程序在发布模式下启动时崩溃:java.lang.NoSuchFieldError: BUILD 错误

从试飞下载时应用程序在启动时崩溃

发布 apk 安装但启动时崩溃。该应用程序在调试模式下完美运行。我查看了 Android Studio,这是我的 adb logcat。

程序仅在调试器外的发布模式下崩溃

IOS unregisterForRemoteNotifications 在飞行模式下不起作用