NSURLConnection sendSynchronousRequest: ошибка при использовании POST - PullRequest
0 голосов
/ 17 января 2010

Я использую пользовательский 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 в 0x0000001c
Разбитая нить: 2

Тема 2 Сбой:
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 :: execute () + 86
11 CFNetwork 0x0000a7b2 MultiplexerSource :: _ execute (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 вызывает сбой. Чего я не понимаю, так это почему.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Вы уже решили эту проблему?

Кажется, проблема в том, что cachedResponseForRequest возвращает новый экземпляр NSCachedURLResponse. Глядя на ваш другой вопрос , даже попытка имитировать NSHTTPURLResponse, похоже, не решает проблему сбоя.

Решение состоит не в том, чтобы создать собственный ответ, а в том, чтобы вернуть ответ из объекта, созданного в storeCachedResponse. Посмотрите, как SDURLCache делает это путем сериализации / десериализации этого объекта.

0 голосов
/ 01 апреля 2010

EXC_BAD_ACCESS - это ссылка на Bad Release где-то ... поместите retain везде, чтобы посмотреть, работает ли он.

...