Я пытаюсь передавать данные между двумя iOS NSURLConenctions (одна загрузка, другая загрузка), но не могу заставить ее работать.
- У меня одновременно работают два соединения NSURLC.
- Один загружает контент с URL с помощью запроса GET.
- Другой загружает только что полученный контент на другой URL в теле запроса PUT.
- В соединении для загрузки я использую setHTTPBodyStream, чтобы указать пользовательский NSInputStream, метод чтения которого возвращает данные, ранее полученные от другого соединения.
- Обе NSURLConnections запланированы в циклах выполнения отдельных фоновых потоков, так что любые (возможно, блокирующие) обратные вызовы делегата не связываются друг с другом (и ни с основным потоком).
Поэтому я подумал, что это будет работать так:
- Соединение загрузки вызывает [read: maxLength] (которое я переопределил) во входном потоке.
- Поскольку данные еще не доступны, блокировка вызова чтения.
- В другом потоке [connection: didReceiveData:] вызывается делегатом соединения для загрузки.
- Он помещает полученные данные в общий буфер, делая его доступным для входного потока соединения загрузки.
- Теперь вызов чтения потока загрузки больше не блокируется, он может вернуть часть данных.
К сожалению, на практике это не работает.После того, как метод чтения потока загрузки блокируется, методы делегата соединения загрузки (например, didReceiveData) больше не вызывают.(Обратите внимание, что если я отключу блокировку на стороне загрузки, тогда didReceiveData на стороне загрузки действительно будет вызываться нормально.)
Я подозреваю, что это должно что-то делать с тем фактом, что метод чтения входного потока загрузки загруженвызывается не в потоке, в котором были созданы соединение и объекты потока, а в каком-то другом потоке (очевидно созданном Какао).Как будто это был какой-то общий поток, используемый обоими NSURLConnections, поэтому, как только он заблокирован, все остальные соединения также перестают работать.Или что-то типа того.
Кто-нибудь имеет представление о том, что на самом деле происходит?
Кроме того, есть ли способ управления тем, в каком потоке вызывается метод read входного потока тела запроса?