Я использую UIViewController
(1-й), который отображает список комиксов, в которых пользователь может выбрать комикс для загрузки.
Загрузка осуществляется в другом UIViewController
(2-й), который имеет tableView
(с пользовательской ячейкой загрузки).UITableviewController без загрузки вида
У меня есть NSMutableArray
, объявленный во 2-м viewController
со всеми комическими URL-адресами, и это tableView
загружается из этого массива.
Проблема заключается в том:
Всякий раз, когда я добавить загружаемый элемент в списке и откройте 2-й viewController
, то tableView
загружается с самого начала, и все файлы начинают загружать снова.
мне нужен способ, так что я могу добавить файлы из 1-го viewController
на второй viewController
«s tableView
и загрузка должна продолжаться с той же стадии, как они были ранее (и не с самого начала снова)
Ниже приведен код того, как работает мой DownloadCell. Каждая ячейка загружает несколько файлов. Первый метод вызывается, когда создается ячейка.
-(void)startDownload:(NSArray*)comicFiles
{
allComicFiles=comicFiles;
downloadedFiles=[[NSMutableArray alloc] init];
[self removeViews];
[self appendViewsToCell];
[loading startAnimating];
[self downloadFile:0];
}
Теперь второй метод вызывается для асинхронного скачивания файлов.
-(void)downloadFile: (int)index
{
if(index>=[allComicFiles count])
{
[self downloadComplete];
return;
}
SingleComicFile *comicFile=allComicFiles[index];
NSURL *url=comicFile.URL;
NSString *fileName=comicFile.FileName;
lblFileName.text=fileName;
NSString *applicationDocumentsDir =
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",fileName]];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:storePath]){
[self updateDownloadProgress:url];
[self downloadFile:index+1];
}
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_sync(dispatch_get_main_queue(), ^{
[data writeToFile:storePath atomically:TRUE];
[self updateDownloadProgress:url];
[self downloadFile:index+1];
});
});
}
tablewviecontroller
класс имеет изменяемый массив, который является в основном массив из массивов файлов. Он имеет конструктор, который я вызываю на странице списка комиксов, чтобы заполнить массив.
-(MyDownloadManager *)initFileQueue: (NSMutableArray *)withComicFileQueue
{
if(_fileArray==nil)
{
_fileArray= [[NSMutableArray alloc]init];
}
_fileArray=withComicFileQueue;
return self;
}
И я связывании TableView как
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
DownloadCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
cell = [[DownloadCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSArray *comicFiles= _fileArray[indexPath.row];
[cell startDownload:comicFiles];
return cell;
}
@ C_X: Что касается вашего редактирования: обратные тики для * кода *. Маркировка слов, таких как «контроллер просмотра», «вид таблицы» и т. Д. Как «код», не повышает читаемость (на мой взгляд). –
Я думаю, что это делает миры более ориентируемыми ... –
Правда. Это сделало намеченные слова выделенными. – Ranadhir