отправка и синхронизация изображений из облака в swift

#swift #firebase #dispatch-async

#swift #firebase #отправка -асинхронная

Вопрос:

Я пытаюсь загрузить несколько сообщений с изображениями из Firebase и отобразить их в моем tableview. В приведенном ниже коде я замечаю, что tableview загружается только после загрузки каждого изображения из вызова функции preLoadImage. Я вызываю весь вызов loadDataFromFirebase() в другом вызове dispatch_async. Что я здесь делаю не так? Разве функция предварительной загрузки изображения не должна выполняться в фоновой очереди, а tableview загружается немедленно?

Прямо сейчас я вижу это из журналов, поэтому могу сказать, что сначала загружаются все изображения размером более 1 МБ, а затем загружается tableview. Спасибо Еще Еще Еще Еще Еще изображения Изображения изображения Изображения изображения Изображения изображения Изображения изображения Еще Еще Еще Еще Еще изображения в TableView

 // loadDataFromFirebase is being called from another dispatch_async call
 func loadDataFromFirebase() {

        print("Global: Loading data from Firebase")
        // code to retrieve data.                

        self.globalPost.insert(userPost, atIndex: 0)
//helps imageloading -- this is the one that causes the delay 
        self.preLoadImage(userPost.userImage)
        print ("Obtained DATA in loadDataFromFirebase")


        }




// image loading - this is called in a background queue but until the download here doesn't finish my tableview does not load.

    func preLoadImage(image: String) {
        if (image != "") {
            dispatch_async(dispatch_get_main_queue(), {
                UIImage.cachedImageWithURL(image)
                print ("Downlading image")

        })


        }

    }
  

Комментарии:

1. Интересно, есть ли способ ограничить количество изображений, загружаемых в фоновом режиме, вместо загрузки всех изображений.

Ответ №1:

Использование этого в preLoadImage () исправило это. Правильно ли это выглядит?

 if (image != "") {
            dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0))  {
                UIImage.cachedImageWithURL(image)
                print ("Downlading image")
            }