【问题标题】:Firebase Download Task Queue SwiftFirebase 下载任务队列 Swift
【发布时间】:2017-09-12 15:06:43
【问题描述】:

我目前正在从 Firebase 存储下载图像文件,下面的代码用于 UICollectionView 中的缩略图。当我点击其中一个缩略图时,应用程序会转到另一个 UIViewController,然后从 Firebase 存储下载更多图像. 目前,该应用会等待所有缩略图完成下载,然后再下载UIViewController 中的下一张图片。是否可以提高UIViewController 中新图像的优先级或取消所有其他下载以立即启动新图像?

var imageRef = storageRef.child("Thumbnails/\(itemID).jpg")
imageRef.getData(maxSize: 10 * 1024 * 1024) { data, error 
    if let error = error {
        // Uh-oh, an error occurred!
        print("Error: \(error.localizedDescription)")
     } else {
        let image = UIImage(data: data!)
        self.newsNameArray.append(name)
        self.newsImageArray.append(image!)
        self.newsBarCollectionView?.reloadData()                        
      }
}

谢谢

【问题讨论】:

    标签: ios swift firebase uiviewcontroller firebase-storage


    【解决方案1】:

    您可以像这样获得对 StorageDownloadTask 的引用:

    var allTasks: [StorageDownloadTask] = []
    
    var imageRef = storageRef.child("Thumbnails/\(itemID).jpg")
    let downloadTask = imageRef.getData(maxSize: 10 * 1024 * 1024) { data, error 
        if let error = error {
            // Uh-oh, an error occurred!
            print("Error: \(error.localizedDescription)")
         } else {
            let image = UIImage(data: data!)
            self.newsNameArray.append(name)
            self.newsImageArray.append(image!)
            self.newsBarCollectionView?.reloadData()                        
          }
    }
    

    将您的 downloadTasks 存储在一个数组中,并在下载新图像之前取消所有任务:

    allTasks.append(downloadTask)
    
    ...
    
    for task in allTasks {
        task.cancel()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      相关资源
      最近更新 更多