URL のロードが時々失敗する状況を見ていますが、それは非常に「ひどく」失敗します。ホストに到達できない (つまり、VPN が接続されていない) 場合+[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:]
、次のバックトレースでハングすることがよくあります。
(gdb) bt
#0 in mach_msg_trap ()
#1 in mach_msg ()
#2 in __CFRunLoopServiceMachPort ()
#3 in __CFRunLoopRun ()
#4 in CFRunLoopRunSpecific ()
#5 in +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] ()
#6 in -[NSThread main] ()
#7 in __NSThread__main__ ()
#8 in _pthread_start ()
#9 in thread_start ()
を実装- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
しましたが、呼び出されません。
次のように NSURLRequest を作成しています。
NSURLRequest *theRequest =
[NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:5.0];
そのため、リクエストは無期限にハングアップするのではなく、5 秒後にタイムアウトするはずだと想定していました。これは起こっていません。
これは、Mac OS X のコンソール アプリケーション (iOS ライブラリのテスト フレームワーク) 内で発生することに注意してください。実行ループ構成で何か「奇妙な」ことが起こっているのではないかと思っています。(トレースから、実行中の実行ループ内から新しい実行ループをスピンアップしようとしているように見えます?!)
何か案は?
編集:これは Cocoa アプリケーションではないため、実行ループを手動で実行する必要があります。これはおそらく問題の一部のようです。