2010-01-17 2 views
0

사용자 지정 NSURLCache를 사용하여 특정 웹 페이지의 호출을 가로 채서 동적으로 수정합니다. Inside cachedResponseForRequest : 요청을 수정 한 다음 sendSynchronousRequest를 사용하여 요청을 보냅니다. 이것은 양식을 제출하기 전까지는 잘 작동합니다. 게시물 데이터가있는 경우 실패합니다.NSURLConnection sendSynchronousRequest : POST를 사용할 때 실패합니다.

HTTPBody를 제거하고 요청을 GET으로 설정하면 성공합니다. 하지만 POST가 필요합니다. 요청을 비동기 적으로 보내면 동기 요청이 실패하는 이유를 알 수없는 이유가 있습니다.

날짜/시간 : 2010-01-17 12 : 37 : 55.416 -0800
OS 버전 : 아이폰 OS 3.1.2 (7D11)
보고서 버전 : 104

여기 내 스택 추적입니다

예외 유형 : EXC_BAD_ACCESS (SIGBUS)
예외 코드 : 2가 추락 한 2

스레드 :x0000001c
추락 한 스레드에서 KERN_PROTECTION_FAILURE 314,960,453,210 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
,617,451 515,7 CFNetwork에서 0x0000c5e6 URLConnectionLoader :: LoaderConnectionEventQueue :: processAllEventsAndConsumePayload (XConnectionEventInfo 긴) + 134
8 CFNetwork에서 0x0000c53a URLConnectionLoader :: processEvents() + 60 9
CFNetwork에서 0x0000a892 URLConnection의 :: multiplexerClientPerform (RunLoopMultiplexer
) + 30
10 CFNetwork에서 0x0000a812 MultiplexerSource는 : + 86
11 CFNetwork에서 0x0000a7b2 MultiplexerSource :: _ 수행 (공극 *)) (실시 + 2
12 CoreFoundation에서 0x000573a0 CFRunLoopRunSpecific + 1,908
13 CoreFoundation에서 0x00056c18 CFRunLoopRunInMode + 44
14 재단 0x0005a998 + [있는 NSURLConnection (NSURLConnectionReallyInternal) _resourceLoadLoop :] + 172
15 재단 0x00053ac6 - [NSThread 메인] + 42
16 재단 0x00001d0e __NSThread__main__ + 852
17 libSystem.B.dylib 0x0002b7b0 _pthread_body + 20

보시다시피, copyHeaderFieldValue가 충돌을 일으키고 있습니다. 내가 이해하지 못하는 이유는 무엇인가.

답변

0

EXC_BAD_ACCESS는 어딘가에 나쁜 릴리스에 대한 링크입니다. 작동하는지 확인하기 위해 모든 곳을 유지하십시오.

0

아직 해결되지 않으셨습니까?

문제는 cachedResponseForRequest가 NSCachedURLResponse의 새 인스턴스를 반환하는 것 같습니다. other question을 보면 심지어 NSHTTPURLResponse를 모방하려고해도 충돌 문제가 해결되지 않는 것 같습니다.

해결책은 사용자의 응답을 생성하지 않고 storeCachedResponse에서 생성 된 객체에서 응답을 반환하는 것입니다. SDURLCache이 해당 객체를 직렬화/역 직렬화하여이 작업을 수행하는 방법을 살펴보십시오.

+0

예. 나는 그것을 풀었다. .. 내가 잊어 버렸던 것처럼 내가 한 일을보고 다시보고해야 할 것이다. –

+0

네, 체크 아웃 기회가 있다면 정말 좋을 것입니다. – Pooya

+0

UIWebView 델리게이트의'shouldStartLoadWithRequest :'보낸 요청은 실제로 변경 가능합니다. 그냥 NSMutableURLRequest에 캐스트하면 수정할 수 있습니다. 'setHTTPBody :'를 사용하여 모든 게시물 데이터를 추가하지만 어떤 이유로 인해 POST가 실패하는 것처럼 메소드를 GET으로 설정해야합니다. 그런 다음 맞춤 URLCache에서 수정 된 URLRequest를 확인하십시오. 새 NSMutableURLRequest를 만들고 메서드를 POST로 설정하는 것만 제외하고 요청과 일치하는 모든 속성을 설정합니다. –