Помогите получить прогресс NSURLConnection

Приложение загружает файл (plist), созданный сервером. Серверу требуется много времени для создания файла, поэтому я хотел бы иметь возможность показывать прогресс (возможно, просматривать UIProgressView, но это не важно).

Поскольку файл, который я загружаю, еще не был создан в начале запроса, мы не знаем expectedContentLength. Однако у меня есть средства для предоставления обновлений о прогрессе из самого скрипта [PHP]. Для этого я использую ob_flush() для каждой строки в файле, что отлично работает в браузере.

Но когда я делаю запрос из приложения, я получаю вызов от connection:didReceiveData: только после завершения выполнения сценария, так что это не очень полезно.

Итак, мой вопрос сводится к следующему:
Как я могу получить доступ к ходу выполнения такого php-скрипта из своего приложения?

Я бы не возражал против отправки 2 запросов на сервер, первый из которых генерирует файл и предоставляет обновления при этом, а затем еще один для загрузки фактического файла.

Поскольку ни один из моих методов делегата NSUrlConnection не вызывается до завершения запроса, что нужно сделать моему сценарию, чтобы вызвать эти методы?


person kbanman    schedule 22.01.2010    source источник


Ответы (1)


Ваша проблема скорее всего на сервере. Если сервер отправляет данные по мере их обработки, и эта обработка занимает значительное время, вы, вероятно, должны получить более одного уведомления об connection:didReceiveData:.

В руководстве по PHP есть обсуждение, которое может быть уместным. http://php.net/manual/en/function.ob-flush.php

Я бы проверил с помощью анализатора пакетов, что сервер фактически отправляет данные постепенно, как вы ожидаете.

person Andrew Pouliot    schedule 22.01.2010
comment
ob_flush() у меня работает в браузере; Я получаю добавочные обновления. Однако при выполнении запроса из приложения я получаю все одним куском. - person kbanman; 22.01.2010
comment
WiFi или 3G? О какой временной шкале мы здесь говорим; скрипт занимает 1 секунду или › 10 секунд? - person Andrew Pouliot; 26.01.2010