0

カスタム NSURLCache を使用して、特定の Web ページの呼び出しを傍受し、それらを動的に変更しています。内部 cachedResponseForRequest: リクエストを変更し、sendSynchronousRequest を使用して送信します。これは、フォームを送信しようとするまでは非常にうまく機能します。投稿データがある場合は失敗します。

HTTPBody を削除してリクエストを GET に設定すると、成功します。しかし、私はそれが POST で動作する必要があります。リクエストを非同期に送信すると、それも機能するため、同期リクエストが失敗する理由がわかりません。

ここに私のスタックトレースがあります:

日付/時刻: 2010-01-17 12:37:55.416 -0800
OS バージョン: iPhone OS 3.1.2 (7D11)
レポート バージョン: 104

例外の種類: EXC_BAD_ACCESS (SIGBUS)
例外コード: KERN_PROTECTION_FAILURE at 0x0000001cクラッシュした
スレッド: 2

Thread 2 Crashed:
0 CFNetwork 0x0000b4e4 HTTPMessage::copyHeaderFieldValue(__CFString const*) + 18
1 CFNetwork 0x0000b4c8 CFHTTPMessageCopyHeaderFieldValue + 16
2 CFNetwork 0x0000e022 HTTPProtocol::createStream() + 328
3 CFNetwork 0x0000de8a HTTPProtocol::createAndOpenStream() + 458
4 CFNetwork 0x0000cba2 HTTPProtocol ::startLoad() + 278
5 CFNetwork 0x0000c8da URLConnectionLoader::loaderScheduleOriginLoad(_CFURLRequest const*) + 216
6 CFNetwork 0x0000c77c URLConnectionLoader::loaderScheduleLoad(_CFURLRequest const*) + 280
7 CFNetwork 0x0000c5e6 URLConnectionLoader::LoaderConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo , long) + 134
8 CFNetwork 0x0000c53a URLConnectionLoader::processEvents() + 60
9 CFNetwork 0x0000a892 URLConnection::multiplexerClientPerform(RunLoopMultiplexer
) +
Source30 10 CFNetwork0x01 86
11 CFNetwork 0x0000a7b2 MultiplexerSource::_perform(void*) + 2
12 CoreFoundation 0x000573a0 CFRunLoopRunSpecific + 1908
13 CoreFoundation 0x00056c18 CFRunLoopRunInMode + 44
14 Foundation 0x0005a998 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 172
15 Foundation 0x00053ac6 -[NSThread main] + 42
16 Foundation 0x00001d0e __NSThread__main__ + 852
17 libSystem.B.dylib 0x0002b7b0 _pthread_body + 20

ご覧のとおり、copyHeaderFieldValue がクラッシュを引き起こしています。私が理解していないのは、その理由です。

4

2 に答える 2

0

EXC_BAD_ACCESSは、どこかにある不良リリースへのリンクです...それが機能するかどうかを確認するために、どこにでも保持します。

于 2010-03-31T21:10:59.417 に答える
0

あなたはまだこれを解決しましたか?

問題は、cachedResponseForRequest が NSCachedURLResponse の新しいインスタンスを返す場合にあるようです。あなたの他の質問を見ると、NSHTTPURLResponse を模倣しようとしても、クラッシュの問題は解決しないようです。

解決策は、独自の応答を作成するのではなく、storeCachedResponse で作成されたオブジェクトから応答を返すことです。そのオブジェクトをシリアライズ/デシリアライズすることでSDURLCacheがこれを行う方法を見てみましょう。

于 2011-04-07T02:18:21.017 に答える