0

我正在使用自定义 NSURLCache 来拦截对某些网页的调用,以便动态修改它们。在 cachedResponseForRequest 内部:我修改了请求,然后使用 sendSynchronousRequest 将其发送出去。在您尝试提交表单之前,这非常有效。如果有发布数据,它会失败。

如果我删除 HTTPBody 并将请求设置为 GET,它会成功。但我需要它与 POST 一起使用。如果我异步发送请求,它也可以工作,这就是为什么我无法弄清楚同步请求失败的原因。

这是我的堆栈跟踪:

日期/时间:2010-01-17 12:37:55.416 -0800
操作系统版本: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
) + 30
10 CFNetwork 0x0000a812 MultiplexerSource::perform() + 86
11 CFNetwork 0x0000a7b2 MultiplexerSource::_perform(void*) + 2
12 CoreFoundation 0x000573a0 CFRunLoopRunSpecific + 1908
13 CoreFoundation 0x00056c18 CFRunLoopRunInMode + 44
14 基金会 0x0005a998 +[NSResourceLoadConnection:] +[NSResourceLoadConnection:]内部 172
15 基础 0x00053ac6 -[NSThread main] + 42
16 基础 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 回答