我正在使用UIViewController
(第一个)显示漫画列表,用户可以在其中选择要下载的漫画。
下载发生在另一个UIViewController
(第二个)tableView
(带有自定义下载单元)。
我在第二个NSMutableArray
中声明了viewController
,其中包含所有漫画网址,并且tableView
已从此数组中加载。
问题是:
每当我将可下载项目添加到列表并打开第二个viewController
时,tableView
将从头开始加载,所有文件将再次开始下载。
我需要一种方法,以便我可以将文件从第1个viewController
添加到第2 viewController
个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;
}
答案 0 :(得分:0)
也许在你的情况下,解决方案是使一次启动的shareViewController(loadView,viewDidLoad将被调用一次)。此外,当您关闭共享加载视图控制器时,它不会重新分配并继续下载所选文件。您可以实现一些委托方法来通知下载完成等等。通过这种方式,您将获得共享的长期下载器。
static DownloadViewController *sharedInstance = nil;
@implementation DownloadViewController
+ (id) sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [DownloadViewController new];
});
return sharedInstance;
}