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

问题描述:

基本上我正在使用3个视图控制器。访问视图控制器无需重新初始化

  1. 开始下载的主视图。 (基于Webview的通过下载)。
  2. 模态下载控制器。 (基于标签)。
  3. Downloader(HCDownload)。

在主视图我的下载获取传递,像这样:

//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]。

我在下载程序视图中调用此函数将会出现,但没有显示。

有没有人有任何建议或曾与此控制器?

任何帮助,将不胜感激。

好吧,用另一个答案的最后一条评论“使activeDL成为一个成员变量而不是本地变量”,让我搜索了一些修补程序并修复了错误,运行完美。

我在AppDelegate中声明了这一切。

AppDelegate.h

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

AppDelegate中。米

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指引我朝着正确的方向前进。

当你拨打:

activeDL = [[HCDownloadViewController alloc] init]; 

您正在创建一个新的下载器,它有自己的内部downloads阵列。正如所写的,这个图书馆没有办法将这个信息从一个HCDownloadViewController对象传递给另一个。

将下载内容粘贴到VC中会造成问题 - 我建议您重写这段代码以将其分开。

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

+0

这就是为什么他建议使用[activeDL numberOfDownloads]来填充正在进行的当前下载。我将如何创建该对象来传递?任何方法将工作,因为我没有兴趣发送给苹果进行审查。 – ChrisOSX

+0

您只提供了片段,因此很难回答。每次调用'[[HCDownloadViewController alloc] init]'时,都会创建一个新的空的下载数组。他们不共享。所以从一个VC下载不会在另一个VC中看到。你需要有一个HCDownloadViewController对象。 –

+0

我明白,每次我调用[[HCDownloadViewController alloc] init],我都会重新创建视图。我只需要知道具有该视图控制器对象引用的最佳方式。是的,我知道我只提供片段,但这些都是关于我如何处理这个问题的重要信息。 – ChrisOSX