以下が表示される理由を理解するための助けが必要です。
AFNetworking 3.0.4
iOS9.x で
到達可能性マネージャーを取得すると
AFNetworkReachabilityManager.sharedManager()
次に setReachabilityStatusChangeBlock を追加すると、期待どおりの結果が得られます。
- 機内モード:
NotReachable
- WiFi オフ:
ReachableViaWWAN
- Wi-Fi オン:
ReachableViaWiFi
そのため、一般的なケースはすべて期待どおりに機能しています。
managerForAddress
しかし、もっと正確に言いたいのですが、どの IP アドレスと話しているかはわかっているので、代わりに使用したいと思います。これは私がネットからカーゴカルトしたコードです(ほとんどの例は、迅速ではなくobj-c用です)-次の- 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 の結果と正確に一致します- Wi-Fi を使用しているReachableViaWiFi
場合は 、4G のみを使用しているReachableViaWWAN
場合は 、機内モードの場合は ですNotReachable
。
つまり、 の使用方法を完全に誤解しているかmanagerForAddress
、コードのバグがあるかのどちらかです:) どちらの場合でも、誤解/間違っていることを聞きたいです。