Скачать несколько файлов в фоновом потоке - PullRequest
1 голос
/ 09 августа 2011

Я создаю приложение для iPad, где вы можете загружать файлы (например, PDF, документы и т. Д.) И просматривать их в автономном режиме.

У меня уже есть часть просмотра, и вы можете загрузить файл в каталог документов.Как сейчас, вам нужно дождаться окончания загрузки, чтобы двигаться дальше.Эту проблему можно решить, поместив ее в поток, но что происходит, когда пользователь загружает несколько файлов или даже загружает один и тот же файл несколько раз?

Моя идея состоит в том, чтобы создать очередь загрузки с учетом прогресса..

Рабочий процесс:

  • Пользователь открывает документ и нажимает кнопку загрузки, пользователь получает сообщение о том, что загрузка началась, и его можно просмотреть в режиме просмотра автономных документов.

  • Пользователь загружает еще 3 документа.

  • Когда пользователь переходит в автономный режим просмотра документов, пользователь видит табличное представление с 4 заполненными ячейками.,2 документа загружены, а 2 еще загружаются, поскольку в ячейке табличного представления отображается строка загрузки / состояния.

  • Загруженные документы можно просматривать или удалять.

  • Выполняемые загрузки не могут быть просмотрены (пока), но могут быть отменены.

Я хочу создать многопоточный класс загрузки, в который можно добавлять URL-адреса.быть загруженным.класс имеет методы для отмены и удаления документов-загрузок, но также имеет методы для возврата прогресса.Если возможно, класс может обрабатывать одновременные загрузки.

Проблема в том, что я не знаю, с чего начать?

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

NSURLConnection уже асинхронный.Все, что вам нужно сделать, это создать NSURLConnection экземпляров, связать их с вашими структурами данных и иметь их.

Вот пример, где я предполагаю, что у вас есть один UIView на элемент.Если вы используете табличное представление, вы не можете рассчитывать на экземпляры представления, а вместо этого связать загрузку с NSIndexPath или чем-то еще.

@implementation MyDownloadView
- (void)startDownload {
    NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
    [req setHTTPMethod:@"GET"];
    // Set headers etc. if you need
    [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];
    [req release];

    self.responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // Alternatively, store to a file so you don't run out of memory
    [self.responseData appendData:data];
}
@end

Затем реализуйте другие методы делегата NSURLConnection, чтобы сделать то, что вам нужно.

0 голосов
/ 09 августа 2011

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

Яиспользуя asi-http-request для управления загрузками, и они отображаются в виде сетки (AQGridView) вместо UITableView, но я думаю, вы поняли.

Ход загрузки управляется через KVO.

См. PSPDFDownload.m для начала. Загрузите полную демонстрацию здесь

Полное раскрытие: эта демонстрация использует PSPDFKit для более быстрого отображения PDF.Но пример Kiosk - это именно то, что вам нужно, и вам не нужно использовать PSPDFKit для отображения PDF.Есть даже пример пути кода, который использует Apple QuickLook.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...