2010-01-22 1 views
1

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

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

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

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

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

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

ответ

1

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

Существует некоторая дискуссия, которая может иметь значение в руководстве по PHP. http://php.net/manual/en/function.ob-flush.php

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

+1

ob_flush() работает для меня в браузере; Я получаю инкрементные обновления. Однако, когда вы делаете запрос из приложения, я получаю все в одном куске. – kbanman

+0

Wi-Fi или 3G? Какую шкалу времени мы говорим здесь; делает сценарий как 1 секунду, или> 10s? –