2015-10-22 2 views
0

Мой вопрос: какой лучший способ узнать, когда загружено последнее изображение, поскольку после того, как все файлы были загружены, мне нужно обновить интерфейс.Загрузка нескольких файлов в фоновом режиме с использованием Parse

Я загружаю массив PFFiles из Parse. То, что я делаю момент является: получение массива PFFiles от синтаксического анализа таким образом

func getAllUserPictures(completion: (imageFiles: [PFFile]) -> Void) { 
     guard let id = currentUserID else { 
     return 
    } 

    let query = PFQuery(className: "Profile") 
    query.whereKey("objectId", equalTo: id) 
    query.includeKey("avatars") 
    query.findObjectsInBackgroundWithBlock { profile, error in 
     guard let imageFiles = profile?.first?.objectForKey("avatars") as? [PFFile] else { 
      return 
     } 
     completion(imageFiles: imageFiles) 
    } 
} 

После получения массива ImageFile из обработчика завершения я правильно загрузить их таким образом:

func getUserPicturesWithBlock(completion: (result: [UIImage]) -> Void) { 
    DataManager.sharedInstance.getAllUserPictures { imageFiles in 
     for file in imageFiles { 
      file.getDataInBackgroundWithBlock({ data, error in 
       guard let data = data, let image = UIImage (data: data) else{ 
        return 
       } 

       self.imagesArray.append(image) 
      }) 
     } 
    } 
} 

ответ

1

Рассматривали ли вы использование нескольких PFImageView из фрейма ParseUI?

Вы можете назначить каждый из PFFiles PFImageView в завершении запроса, а затем вызвать loadInBackground на каждом PFImageView. Класс PFImageView автоматически обрабатывает изображения после загрузки данных, и это также обновит каждое изображение, как только оно будет извлечено, а не ждет их всех вместе.

В качестве альтернативы, чтобы сохранить аналогичную структуру с тем, что у вас уже есть, вы можете использовать размер массива imageFiles, чтобы указать, когда все они были загружены. По завершении загрузки каждого файла вы можете проверить, равно ли количество загруженных изображений, равное общему размеру массива.

+0

Я использовал первый метод, который вы предлагаете в другом случае, когда у меня был UIImageView в ячейках, и они wold обрабатывали сами, но в этом случае у меня есть UIScrollView, где я добавляю все изображения после их загрузки. Уже используя второй метод, который вы предложили, но я обеспокоен тем, что по какой-то причине может произойти сбой одной из загрузок, а количество изображений и файлов PFF не будет равным, не позволяя обновлять пользовательский интерфейс. – Bashta

+0

Почему бы не обновить пользовательский интерфейс после каждой загрузки? Обновление пользовательского интерфейса - очень эффективная и быстрая задача: – Russell

+0

Поскольку мне нужно установить изображения в режиме прокрутки только один раз, чтобы предотвратить «белые страницы» во время прокрутки пользователя. Я бы предпочел, чтобы пользователь подождал, пока вся загрузка будет выполнена, а затем покажет не полный вид в этом случае. Загрузка выполняется через пару секунд, проблема в том, что мне нужно что-то вроде обработчика завершения, который будет уведомлять, когда были загружены все изображения, включая случаи, когда произошла ошибка загрузки. – Bashta

Смежные вопросы