访问视图控制器无需重新初始化
问题描述:
基本上我正在使用3个视图控制器。访问视图控制器无需重新初始化
- 开始下载的主视图。 (基于Webview的通过下载)。
- 模态下载控制器。 (基于标签)。
- 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
对象并传递它。
这就是为什么他建议使用[activeDL numberOfDownloads]来填充正在进行的当前下载。我将如何创建该对象来传递?任何方法将工作,因为我没有兴趣发送给苹果进行审查。 – ChrisOSX
您只提供了片段,因此很难回答。每次调用'[[HCDownloadViewController alloc] init]'时,都会创建一个新的空的下载数组。他们不共享。所以从一个VC下载不会在另一个VC中看到。你需要有一个HCDownloadViewController对象。 –
我明白,每次我调用[[HCDownloadViewController alloc] init],我都会重新创建视图。我只需要知道具有该视图控制器对象引用的最佳方式。是的,我知道我只提供片段,但这些都是关于我如何处理这个问题的重要信息。 – ChrisOSX