在下载实际图像时,将占位符图像添加到UICollectionView单元格

时间:2018-08-24 01:24:50

标签: swift uicollectionview

我有一个收集视图,其中填充了根据解析数据创建的图像。通过使用NSFetchedResultsController作为数据源来填充和更新它。代码在Swift 4中,因此,我正在使用数据视图视图的数据源方法以及NSFetchedResultsControllerDelegate的委托方法,如下所示:

func collectionView (_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if let count = fetchedResultsController.sections?[0].numberOfObjects {
        return count
    }else {
        return 0
    }
}

func collectionView (_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    print("Setting cell with photo")
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as! CollectionViewCell
    let photoForCell = fetchedResultsController.object(at: indexPath)

    cell.cellImage.image = UIImage(data: photoForCell.imageData!)
    print(photoForCell.imageData!)

    return cell
}

我正在尝试计算在解析的数据中提取了多少个图像,并使用此信息临时填充集合视图中的所有单元格中所有具有相同占位符图像的单元格。然后,一旦所有图像都下载并保存,NSFetchedResultsController将触发数据源方法来刷新并使用新照片(而不是占位符照片)填充集合视图。

我无法找到任何显示该操作方法的视频或帖子。我尝试创建一个变量,该变量保存已解析数据中的对象计数。然后,在(:numberOfItemsInSection :)和(:cellForItemAt :)的if语句中使用该变量,以确定是否应从保存的照片中填充收藏集,或者使用如下临时照片来填充该收藏集:

func collectionView (_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if self.placeHolderCount != nil {
        return placeHolderCount
    }

    if let count = fetchedResultsController.sections?[0].numberOfObjects {
        return count
    }else {
        return 0
    }
}

func collectionView (_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    print("Setting cell with photo")
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as! CollectionViewCell
    let photoForCell = fetchedResultsController.object(at: indexPath)

    if self.placeHolderCount != nil {
        cell.cellImage.image = #imageLiteral(resourceName: "VirtualTourist_5112")
        return cell
    }

    cell.cellImage.image = UIImage(data: photoForCell.imageData!)
    print(photoForCell.imageData!)

    return cell
}

不幸的是,这导致应用程序崩溃,并显示一条错误消息:“ NSInvalidArgumentException原因:'索引0的节中索引0的对象不存在”

在进行故障排除期间,我发现下载所有图像后保存视图上下文时会发生崩溃。应用程序中的所有内容都可以正常运行,包括加载下载的图像,直到我将更改添加到委托方法中为止。有谁知道我走的路正确吗?我应该以一种完全不同的方式去做吗?我已经看到可以实现此目的的外部库,但是我不能为此特定应用程序使用任何外部库或框架。

0 个答案:

没有答案