#iphone #delegates #background #download #asihttprequest
#iPhone #делегаты #фон #Скачать #asihttprequest
Вопрос:
Я планировал использовать ASIHTTPRequest для загрузки файла mp3. мне нужно будет использовать очереди, потому что может быть несколько одновременных загрузок.
Я видел, что вы можете использовать
[request setShouldContinueWhenAppEntersBackground:YES];
если вы хотите поддерживать фоновое выполнение…
Если файл завершается в фоновом режиме, как я могу с этим справиться?
будут ли делегаты вызваны в любом случае? могу ли я создать один из этих значков уведомлений от делегата, если приложение работало в фоновом режиме, когда вызывался делегат?
PS: Я нахожусь на iOS4, и поддерживается фоновый exec.
Ответ №1:
requestFinished
Метод все равно должен вызываться до того, как endBackgroundTask:
будет вызван при загрузке; однако, чтобы гарантировать выполнение нужной вам функциональности (значок уведомления или что-то еще), вы должны использовать UIBackgroundTask
.
В основном идея заключается в том, что вы создаете новую фоновую задачу и используете beginBackgroundTaskWithExpirationHandler:
в методе delegate finished, а затем делаете все, что хотите в фоновой задаче (смотрите руководство Apple по разработке об этом здесь).
Убедитесь, что вы вызываете endBackgroundTask
свою задачу после того, как закончите!
Комментарии:
1. UIBackgroundTask требует синхронной работы, не так ли? Мне нужно показывать ход загрузки по мере того, как это происходит. Сделает ли синхронность операции невозможным получение уведомлений делегатов о ходе выполнения?
2. Я не верю, что есть способ показать пользователю прогресс, пока приложение работает в фоновом режиме. Я говорил об использовании UIBackgroundTask для уведомления пользователя о завершении загрузки, если приложение завершает загрузку в фоновом режиме. Вы все равно будете использовать ASIHTTP для загрузки / мониторинга очереди.
3. Похоже, у меня недостаточно опыта, чтобы полностью понять этот ответ. : ( из того, что вы сказали, я понял, что делегаты (ASIhttp …) будут вызваны в любом случае, и мне придется запустить beginBackgroundTask ….. чтобы выполнить уведомление. Это вызывает у меня в голове еще один вопрос. Если я попытаюсь обновить UIProgressBar в делегате, разве не существует правила, согласно которому приложение, которое обновляет пользовательский интерфейс в фоновом режиме, будет мгновенно убито? Есть ли способ узнать, вызывался ли делегат, когда приложение работало в фоновом режиме? (Простите меня, но я немного неопытен.)
4. Кроме того, я не хочу показывать какие-либо обновления, поскольку пользователь находится в фоновом режиме. Мне просто нужно показывать панель прогресса, когда она находится на переднем плане, и поддерживать загрузку в фоновом режиме.
5. Я загружаю файл, и он останавливается при переходе в фоновом режиме, я использовал вышеупомянутую строку, и она мгновенно завершилась сбоем, и сотрудник сервера сказал мне, что ваш сокет был отключен с этой ошибкой: «Не удалась обработка запроса multipart / form-data. Ошибка чтения из сокета»