访问视图控制器而无需重新初始化

时间:2016-03-04 16:09:39

标签: ios objective-c uitableview download

基本上我正在使用3个视图控制器。

  1. 开始下载的主视图。 (基于Webview的通过下载)。
  2. 模态下载控制器。 (基于标签)。
  3. 下载器(HCDownload)。
  4. 在主视图中,我的下载如下所示:

    //Fire download
    [activeDL downloadURL:fileURL userInfo:nil];
    [self presentViewController:vc animated:YES completion:nil];
    

    activeDL在viewDidLoad中初始化:

    activeDL = [[HCDownloadViewController alloc] init];
    

    如果我删除了presentViewController,它仍会下载,这很好。然后我点击我的下载按钮,它会调出控制器来定义标签,如下所示:

    center = [[CenterViewController alloc] init];
    activeDL = [[HCDownloadViewController alloc] init];
    completedDL = [[DownloadsViewController alloc] init];
    
    activeDL.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Active Downloads"
                                                        image:nil //[UIImage imageNamed:@"view1"]
                                                          tag:1];
    
    completedDL.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Completed Downloads"
                                                           image:nil //[UIImage imageNamed:@"view3"]
                                                             tag:2];
    
    [self setViewControllers:[NSArray arrayWithObjects:activeDL, completedDL, nil]];
    

    但是,它没有通过当前的活动下载。我不知道这是初始化问题,还是显示当前下载的选项卡问题。

    从他的github,他建议获得当前的下载次数是:dlvc.numberOfDownloads对我来说这将是 [activeDL numberOfDownloads]。

    我在Downloader viewWillAppear中调用它,但没有显示。

    是否有人有任何建议或使用此控制器?

    任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

致电时:

 activeDL = [[HCDownloadViewController alloc] init];

您正在创建一个新的下载控制器,它有自己的内部downloads数组。如图所示,此库无法将此信息从一个HCDownloadViewController对象传递到另一个。

将下载内容绑定到VC会导致问题 - 我建议您重写此代码以将其拆分。

要破解它,尝试只创建一个HCDownloadViewController对象并传递它。

答案 1 :(得分:0)

好的,其他答案的最后一个评论,"使activeDL成为一个成员变量而不是一个本地变量。",让我谷歌搜索和一些修补和错误修复沿着我设法的方式让它完美无瑕。

我在AppDelegate中宣布了这一切。

AppDelegate.h

@interface SharedDownloader : HCDownloadViewController <HCDownloadViewControllerDelegate>
+ (id)downloadingView;
@end

AppDelegate.m

static HCDownloadViewController *active;
@implementation SharedDownloader
+ (id)downloadingView {
    if (active == nil)
        active = [[HCDownloadViewController alloc] init];
    return active;
}
@end

在我的主视图控制器中调用类进行下载:

-(id)init{
    activeDL = [SharedDownloader downloadingView];
    return self;
}

//Spot where I fire the download
if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
    //More code here
    [activeDL downloadURL:fileURL userInfo:nil];
}

最后在我的标签栏控制器中:

-(id)init {
    activeDL = [SharedDownloader downloadingView];    
    return self;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    activeDL.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Active Downloads" image:nil] tag:2]; 
}

我相信这一切。无论如何,感谢Lou Franco指出我正确的方向。