NSURLConnection и связанная пара потоков (CFStreamCreateBoundPair или CFStreamCreateBoundPairCompat) не работают на iPhone 3G - PullRequest
0 голосов
/ 12 мая 2011

Я использую пример SimpleURLConnections для реализации POST-запроса multipart / form-data с использованием связанной пары потоков. Отлично работает в симуляторе и на iPhone 3GS / iPhone 4.

Когда я пробую его на iPhone 3G (работает 3.1.3), данные не отправляются на сервер. NSURLConnection просто продолжает висеть, пока не истечет время ожидания. После некоторого тестирования я понял, что проблема возникает только тогда, когда я записываю в поток производителя более одного раза для каждого соединения. Всякий раз, когда мне нужно написать более одного раза (то есть когда мне нужно ответить более чем на одно событие NSStreamEventHasSpaceAvailable), вещи перестают работать.

Это похоже на ту же проблему: NSURLRequest с входным потоком HTTPBody: Stream отправляет событие перед открытием , и он предоставляет обходной путь, но я не понял, что именно нужно отложить в Для того, чтобы решить проблему.

1 Ответ

0 голосов
/ 12 мая 2011

У меня была такая же проблема, и кажется, что данные будут отправляться только в том случае, если они помещаются в буфер сетевого стека (это объясняет, почему они работают на симуляторе, где буфер предположительно намного больше, чем на устройстве).

Обходной путь, который у нас был для этого, состоял в том, чтобы отложить планирование потока производителя. Используя performSelector:withObject:afterDelay:, мы вызвали метод, который планирует выходной поток в цикле выполнения через 1 секунду, что оставляет URL-соединению достаточно времени для открытия потока.

...