2016-03-04 52 views
0

基本上我正在使用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]。

我在下載程序視圖中調用此函數將會出現,但沒有顯示。

有沒有人有任何建議或曾與此控制器?

任何幫助,將不勝感激。

回答

0

好吧,用另一個答案的最後一條評論「使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指引我朝着正確的方向前進。

1

當你撥打:

activeDL = [[HCDownloadViewController alloc] init]; 

您正在創建一個新的下載器,它有自己的內部downloads陣列。正如所寫的,這個圖書館沒有辦法將這個信息從一個HCDownloadViewController對象傳遞給另一個。

將下載內容粘貼到VC中會造成問題 - 我建議您重寫這段代碼以將其分開。

要破解它,嘗試創建一個HCDownloadViewController對象並傳遞它。

+0

這就是爲什麼他建議使用[activeDL numberOfDownloads]來填充正在進行的當前下載。我將如何創建該對象來傳遞?任何方法將工作,因爲我沒有興趣發送給蘋果進行審查。 – ChrisOSX

+0

您只提供了片段,因此很難回答。每次調用'[[HCDownloadViewController alloc] init]'時,都會創建一個新的空的下載數組。他們不共享。所以從一個VC下載不會在另一個VC中看到。你需要有一個HCDownloadViewController對象。 –

+0

我明白,每次我調用[[HCDownloadViewController alloc] init],我都會重新創建視圖。我只需要知道具有該視圖控制器對象引用的最佳方式。是的,我知道我只提供片段,但這些都是關於我如何處理這個問題的重要信息。 – ChrisOSX