我正在使用Cheapjack Library (iOS)在Swift中的应用程序中下载文件。我从另一个类排队下载。这似乎工作正常,下载排队并开始下载。但是,当下载发生的“DownloadsViewController”未显示时,文件完成下载时不会执行didiFinishDownload块。关于如何处理我的错误的任何想法。 此外,当我打开下载ViewController并将其关闭时,下载会在我解除ViewController时停止。 有什么想法吗?
这是我的代码:
//Adding download from another class
let downloadItem = DownloadsTableViewCellItem(identifier: identifier, urlString: url3, infoLabelTitle: info, stateLabelTitle: "Downloading...", progressLabelTitle: "", action: DownloadsTableViewCellAction.Pause)
DownloadsViewController().addDownloadItem(downloadItem, withIdentifier: identifier)
//Receiving download in DownloadsViewController
func addDownloadItem(downloadItem: DownloadsTableViewCellItem, withIdentifier identifier: CheapjackFile.Identifier) {
downloadItems[identifier] = downloadItem
identifiers.append(identifier)
CheapjackManager.sharedManager.download(downloadItem.url(), identifier: identifier)
self.tableView.reloadData()
}
//DidFinishBlock
func cheapjackManager(manager: CheapjackManager, didFinishDownloading withSession: NSURLSession, downloadTask: NSURLSessionDownloadTask, url: NSURL, forFile file: CheapjackFile) {
dispatch_async(dispatch_get_main_queue()) {
print("Did finish downloading file")
SongsTableViewController().tableView.reloadData()
let filemanager = NSFileManager.defaultManager()
let documentsPath : AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0]
print("DocumentsPath: \(documentsPath)")
let randomUUID: String = NSUUID().UUIDString + ".mp3"
let destinationPath = documentsPath.stringByAppendingString("/" + randomUUID)
print("DestinationPath: \(destinationPath)")
if (!filemanager.fileExistsAtPath(destinationPath as String)) {
let url1 = file.request.URL
print("URL1: \(url1)")
print("Temp Loc: \(String(url))")
let data = NSData(contentsOfURL: url)
if (data != nil) {
data!.writeToFile(destinationPath, atomically: false)
//data!.writeToURL(NSURL(string:destinationPath)!, atomically: false)
print("The music files has been saved.")
let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let fetchRequest = NSFetchRequest(entityName: "Track")
fetchRequest.predicate = NSPredicate(format: "url = %@", String(url1!))
let context = appDel.managedObjectContext
do {
let results = try context.executeFetchRequest(fetchRequest)
fetchResults = results as! [NSManagedObject]
if fetchResults.count != 0 {
let managedObject = fetchResults[0]
managedObject.setValue(destinationPath, forKey: "fileURL")
appDel.saveContext()
SongsTableViewController().fetchData()
} else {
print("No track found")
}
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
} else {
print("The files already exist")
}
}
}
答案 0 :(得分:1)
DownloadsViewController
会被删除。
请注意delegate
的{{1}}为CheapjackManager
。解雇weak
后,DownloadsViewController
将设置为nil,对delegate
的任何调用都将被忽略,包括delegate
。
与此同时,cheapjackManager:didiFinishDownload:
仍在为您下载资源。只是无法在CheapjackManager
中观察到它。