我正在尝试将我的tableView重新加载到一个块中,但我的插座总是为零。我有一个后台管理器,带有一个小的popover来显示当前的下载。一切正常,但我无法在下载时重新加载我的tableView(例如显示下载速度)。
我有一个简单的UITableView
插座class FileDownloadHandlerViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSURLSessionDelegate, NSURLSessionDownloadDelegate {
@IBOutlet var fileDownloadTable: UITableView!
//这是我的下载任务
func URLSession(session: NSURLSession!, downloadTask: NSURLSessionDownloadTask!, didFinishDownloadingToURL location: NSURL!) {
....
if(success == true) {
// Change the flag values of the respective FileDownloadInfo object
let index:Int = self.getFileDownloadInfoIndexWithTaskIdentifier(downloadTask.taskIdentifier)
let fdi = arrFileDownloadData.objectAtIndex(index) as FileDownloadInfo
fdi.isDownloading = false
fdi.downloadComplete = true
fdi.taskIdentifier = -1
fdi.taskResumeData = nil
// Reload the respective table view row using the main thread.
let indexPath = NSIndexPath(forRow: index, inSection: 0)
println(indexPath)
if(fileDownloadTable == nil)
{
println("still nil")
}
NSOperationQueue.mainQueue().addOperationWithBlock({
if(self.fileDownloadTable == nil)
{
println("nil again")
}
//This is the Problem. fileDownloadTable is always nil
//self.fileDownloadTable.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
})
} else {
println("Unable to copy temp file. Error: \(error)")
}
任何想法?我是否需要将我的奥特莱斯传递给这个街区?如果我使用这个DownloadController不在popover内(所以我仍然是我的mainViewController)一切正常。
提前致谢。
修改
Ok发现问题是我将NSUrlSessionConfiguration设置为FileDownloadClass之外的全局变量。
var session:NSURLSession!
var sessionConfiguration:NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.company")
如果我在我的课堂上设置它,我可以重新加载tableView。但是,现在我关闭我的popover并加载其他东西时出现以下错误:
标识符为......的后台网址已存在!
如何检查是否已存在URLSession,还是将其设置为全局URLSession?
答案 0 :(得分:0)
在ViewDidLoad中,添加
[self backgroundSession];
然后添加此功能
- (NSURLSession *)backgroundSession
{
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.iosDevelopment.VDownloader.SimpleBackgroundTransfer.BackgroundSession"];
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
return session;
}