没有调用视图加载的UITableviewController

时间:2014-02-02 18:25:14

标签: ios objective-c uitableview uiviewcontroller

我正在使用UIViewController(第一个)显示漫画列表,用户可以在其中选择要下载的漫画。
下载发生在另一个UIViewController(第二个)tableView带有自定义下载单元)。

我在第二个NSMutableArray中声明了viewController,其中包含所有漫画网址,并且tableView已从此数组中加载。

问题是:
每当我将可下载项目添加到列表并打开第二个viewController时,tableView将从头开始加载,所有文件将再次开始下载。
我需要一种方法,以便我可以将文件从第1个viewController添加到第2 viewControllertableView,并且下载应该从之前的同一阶段继续(而不是从头开始

以下是我的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;
}

1 个答案:

答案 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;
}