2014-09-02 53 views
0

我在弹出窗口中遇到下载管理器问题。访问弹出窗口中不存在的TableView插座

下面是一个例子,我怎么看像此刻:

downloadmanager

当您点击我的仪表盘的任何文件的文件将自动添加到我的下载管理器。但是在我需要开始下载时,点击我的单元格下载。

现在我想开始下载没有弹出窗口是可见的,如果我点击popover我看到进展,如果我的文件。

这里的问题是,我有一个IBOutlet我的表在downloadmanager里面,并且当popover不存在时,它是零。

所以我的整个FileDownloadHandlerClass不起作用,因为我有很多引用到我的Outlet。

这是一些代码:

//在MainViewController

创建经理的实例
let manager = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("FileDownloadHandler") as FileDownloadHandlerViewController 

//在barButtonClick

@IBAction func downloadManagerButtonPressed(sender: AnyObject) { 

    let navController = UINavigationController(rootViewController: manager) 
    let popover = UIPopoverController(contentViewController: navController) 
    popover.popoverContentSize = manager.view.frame.size 
    popover.presentPopoverFromBarButtonItem(sender as UIBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Left | .Up, animated: true) 

} 

//这是我尝试启动下载

func addFileToFileHandler(notification: NSNotification){ 

    var fileObject:Files = notification.object as Files 

    let fileurl = fileObject.url 
    let filetitle = fileObject.filetitle 
    let fileuuid = fileObject.fileuuid 

// this is my global Files Dictionary 
    arrFileDownloadData.append(FileDownloadInfo(fileuuid: fileuuid, title: filetitle, source: fileurl)) 

// Start first download automatically. (only for test, normally i know the cell index) 
    manager.startDownload(0) 

} 

那么是否有机会让我的IBOutlet可以在我的课堂外访问?还是其他想法?或者我应该在我的主视图中为我的Popover创建我的TableView并将其添加为子视图,以便我可以访问它?

在此先感谢。

+0

为您酥料饼的一个全球参考您的控制器驻留和初始化它一旦这样,popover隐藏时,tableview将不会被释放。 – Hokage 2014-09-02 09:08:05

+0

感谢您的回复。正如你在我的代码中看到的,我已经在我的MainViewController中为Popover创建了一个管理器== ViewController的实例。所以实例仍然存在,但我的tableView是零。 – derdida 2014-09-02 10:00:41

+0

'manager'不是popover的实例吗?它是popover的内容控制器。你在本地声明popover为'let popover = UIPopoverController(contentViewController:navController)'。你可以尝试为你的'popover'提供全球参考吗? – Hokage 2014-09-02 14:07:24

回答

0

manager不是popover的实例吗?它是nav的根控制器,其中nav是popover的contentController。你宣布酥料饼的地方为:

let popover = UIPopoverController(contentViewController: navController) 

你能试着具有全球参考你popover这样的事情,如果它会工作:

@IBAction func downloadManagerButtonPressed(sender: AnyObject) 
{ 
    // if globalPopoverReferenceVar is not yet initialized 
    if(globalPopoverReferenceVar == nil) 
    { 
     let navController = UINavigationController(rootViewController: manager) 
     let popover = UIPopoverController(contentViewController: navController) 
     popover.popoverContentSize = manager.view.frame.size 

     // like this 
     globalPopoverReferenceVar = popover 
    } 

    globalPopoverReferenceVar!.presentPopoverFromBarButtonItem(sender as UIBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Left | .Up, animated: true) 
}