我尝试在Swift应用中检查网络连接,并在一定秒数后超时。我正在运行XCode 7 Beta。我使用的代码来自this问题的答案,并在此处:
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
return false
}
let isReachable = flags.contains(.Reachable)
let needsConnection = flags.contains(.ConnectionRequired)
return (isReachable && !needsConnection)
}
此代码在大约一分钟和二十秒之后没有连接(使用iOS模拟器中的网络链接调节器)超时。我无法在网上找到任何使用此方法的任何超时引用,这看起来非常奇怪,因为可以假设大多数应用超时都是由开发人员指定的,而不是预先构建的方法设置的。
另一种可能的方法是使用NSURLConnection.sendSynchronousRequest()和NSMutableURLRequest的timeoutInterval属性。这使用了一个硬编码的URL,这当然不太理想。如何使用此方法创建开发人员指定的连接超时?
答案 0 :(得分:0)
您可以添加NSTimer
(应该比超时短)来发送连接请求以保持活动状态。
超时由服务器而不是客户端设置。