5

我需要一些帮助来理解为什么我会看到以下内容。

AFNetworking 3.0.4在 iOS9.x 上

如果我抓住可达性管理器

AFNetworkReachabilityManager.sharedManager()

然后添加一个 setReachabilityStatusChangeBlock 然后我得到我所期望的。

  • 飞行模式:NotReachable
  • WiFi 关闭:ReachableViaWWAN
  • WiFi 开启:ReachableViaWiFi

所以 - 一般情况下都按预期工作。

但我想更准确一点——我们知道我们正在与之交谈的 IP 地址,所以我想managerForAddress改用它。这是我从网上收集到的代码(大多数示例都是针对 obj-c 而不是 swift) - 在下面 - ip 是地址的字符串(点四边形形式):

let isLittleEndian = Int(OSHostByteOrder()) == OSLittleEndian

let htons  = isLittleEndian ? _OSSwapInt16 : { $0 }

var address = sockaddr_in()
address.sin_len = UInt8(sizeofValue(address))
address.sin_family = sa_family_t(AF_INET)
address.sin_port = htons(443);
address.sin_addr.s_addr = inet_addr(ip);

addressReachability = withUnsafePointer(&address) {
    AFNetworkReachabilityManager(forAddress: UnsafePointer($0))
}

然后我可以向这个管理器添加一个 setReachabilityStatusChangeBlock 并开始监控。

现在 - 我作为 IP 发送的内容无关紧要 - 一个空字符串,一个 443 正在侦听的有效 IP 地址,一个 443 未侦听的有效 IP 地址,一个无效的 IP 地址 - 结果与 sharedManager 的结果完全匹配- 如果我使用 wifi - 那么它是ReachableViaWiFi,如果我只使用 4G,那么它是ReachableViaWWAN,如果我处于飞行模式它是NotReachable

所以 - 要么我完全误解了如何managerForAddress使用,要么我有一个代码错误:) 在任何一种情况下,我都很想听听我误解/错了什么。

4

0 回答 0