首页 > 解决方案 > 调用localizedNetworkReachabilityStatusString 后的未知状态

问题描述

我需要将网络状态发送到某个分析服务器,所以我需要在应用程序启动后发送它。我尝试使用 Alamofire,但我通常会得到未知状态,如果有某种延迟,它会显示正确的状态:这些代码将在我的 AppDelegate (didFinishLaunchingWithOptions) 中运行:

AFNetworkReachabilityManager.shared().startMonitoring()
AFNetworkReachabilityManager.shared().localizedNetworkReachabilityStatusString()

立即获得正确状态的最佳方法是什么?

更新 1:

我更新了我的代码并尝试使用完成处理程序,但是为什么当我使用此方法时它会打印多个 YES?

connectedCompletionBlock({ connected in

        if connected {
            print("YES")
        } else {
            print("NO")
        }

    })


class func connectedCompletionBlock(_ completion: @escaping (_ connected: Bool) -> Void) {

    AFNetworkReachabilityManager.shared().startMonitoring()

    AFNetworkReachabilityManager.shared().setReachabilityStatusChange({ status in

        var isConnected = false
        let wifi = AFNetworkReachabilityStatus.reachableViaWiFi
        let wwan =  AFNetworkReachabilityStatus.reachableViaWWAN

        if ( status == wifi || status == wwan)  {
            con = true
        }

        AFNetworkReachabilityManager.shared().stopMonitoring()
        completion(isConnected)


    })
}

标签: swiftalamofire

解决方案


好的,因为没有人没有回答,我认为与您分享解决方案很好。问题是这样的:我在 didFinishLaunchingWithOptions 上调用了这个方法,因为 Alamofire 需要一些时间才能确定连接状态,所以它会返回未知!我在 applicationDidBecomeActive 上调用了它,现在它工作正常。


推荐阅读