我有iOS移动应用程序,在从服务器获取数据之前有互联网可用性检查。
我使用此代码
func isInternetAvailable() -> Bool
{
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
除了一部手机外,数百台设备上的一切都很好 - iPhone SE。 当这款iPhone通过Wi-Fi连接到互联网时 - 没有问题,但如果这款手机通过3G或LTE连接 - 此功能返回false,应用程序未加载数据。
我将iOS更新到上一版本,多次重新安装我的应用程序。但我对这个问题没有好运。我在日志中唯一拥有的是
可选(错误域= NSURLErrorDomain代码= -1009“Internet连接似乎处于脱机状态。”UserInfo = {NSUnderlyingError = 0x17424b910 {错误域= kCFErrorDomainCFNetwork代码= -1009“(null)”UserInfo = {_ kCFStreamErrorCodeKey = 50, _kCFStreamErrorDomainKey = 1}},NSErrorFailingURLStringKey = http://some_url.com/api/,NSErrorFailingURLKey = http://some_url.com/api/,_ kCFStreamErrorDomainKey = 1,_kCFStreamErrorCodeKey = 50,NSLocalizedDescription =互联网连接似乎处于离线状态。})
P.S。 据我所知,这是唯一一个有这个问题的手机。应用程序更新或iOS版本更新不会改变去年的任何内容,最后一件让我发疯的事 - 所有其他应用程序都在正常使用这款手机!