7

ホスト名の代わりに IP アドレスを使用して、シミュレーターの iOS アプリケーションにローカル サーバーと通信するように指示しようとすると、アプリは読み込み画面でハングし、サーバーからの応答を待機します。

私はObjective Cを初めて使用しますが、コードはリクエストを処理するAFNetowrkingフレームワークを使用しており、AFHTTPClientオブジェクトのIPアドレスに対してSCNetworkReachabilityFlagsプロパティが異なる方法で設定されています。

IP アドレスとホスト名の AFHTTPClient オブジェクトの次のプロパティは、デバッグ中にキャプチャされました。

<SCNetworkReachability 0xd26d8a0 [0x53b9ec8]>
{address = 127.0.0.1, flags = 0x00010002, if_index = 1}

<SCNetworkReachability 0xcf283f0 [0x53b9ec8]>
{name = localhost (server query active), flags = 0x80000000, if_index = 0}

AFHTTPClient.m クラス内の startMonitoringNetworkReachability メソッドには、IP アドレスに対してトリガーされる次の if ステートメントがありますが、それが問題かどうかはわかりません。

/* Network reachability monitoring does not establish a baseline for IP addresses as
it does for hostnames, so if the base URL host is an IP address, the initial 
reachability callback is manually triggered.
 */
if (AFURLHostIsIPAddress(self.baseURL)) {
    SCNetworkReachabilityFlags flags;
    SCNetworkReachabilityGetFlags(self.networkReachability, &flags);
    dispatch_async(dispatch_get_main_queue(), ^{
        AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags);
        callback(status);
    });
}

私の質問は、問題の原因と、IP アドレスを baseURL として使用してサーバーに接続するにはどうすればよいかということです。

4

1 に答える 1

4

これはよくある問題です。AFNetworking github ページでこれに関する議論がありました: https://github.com/AFNetworking/AFNetworking/issues/2191

ドメインと IP アドレスは別の方法でチェックされます。

managerForAddress: http://cocoadocs.org/docsets/AFNetworking/2.5.0/Classes/AFNetworkReachabilityManager.html#//api/name/managerForAddressで作成されたマネージャーを使用して、IP アドレスを確認できます。

これが役立つことを願っています!ご不明な点がございましたら、お気軽にお問い合わせください。

編集

私は質問を誤解したと思います。

AFHTTPRequestOperationManager以前とを使用してリクエストを送信しましたがAFURLSessionManager、どちらも URL に IP アドレスを使用して機能します。

それらの使用方法の例は、http: //cocoadocs.org/docsets/AFNetworking/2.5.0/#usageにあります。

于 2014-12-04T21:47:04.200 に答える