如何在Collection View中删除多个项目

时间:2016-06-10 02:36:59

标签: ios swift

我有2个像这样的集合视图:

enter image description here

第一个是专辑的集合视图,第二个是每个专辑中照片的集合视图。

数据来自服务器。我想将一些照片从AlbumA移动到AlbumB。

我试过这样的话:

if response != nil {
    // Update UI Move photo from AlbumA to AlbumB
    // Get all images from albumA
    var sourceImages: [UIImage] = []
    for i in 0..<self.checkSelectedImages[self.selectedAlbumIndex].count {
        if self.checkSelectedImages[self.selectedAlbumIndex][i] == false {
            let cell = self.imageCollectionView.cellForItemAtIndexPath(NSIndexPath(forRow: i, inSection: 0)) as! ODIProfileMovePhotoImageCell
            let sourceImage = cell.imageView.image
            self.imageCollectionView.deleteItemsAtIndexPaths([NSIndexPath(forRow: i, inSection: 0)])
            sourceImages.append(sourceImage!)
            self.imageCollectionView.reloadData()
        }
    }
    // Send those above images to AlBumB
    for i in 0..<sourceImages.count {
        self.imageCollectionView.insertItemsAtIndexPaths([NSIndexPath(forRow: i, inSection: 0)])
    }
    self.imageCollectionView.reloadData()
}

和numberOfItemsInSection:

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if collectionView == self.albumCollectionView {
        return listData.count + 1
    }
    else if collectionView == self.imageCollectionView {
        if listData.count > 0 {
            if selectedAlbumIndex > 0 {
                return listData[selectedAlbumIndex - 1].photos.count
            } else {
                return thumbnailImagesFromPhotoLibrary.count
            }
        }
    }
    return thumbnailImagesFromPhotoLibrary.count
}

但它在这一行崩溃了:

self.imageCollectionView.deleteItemsAtIndexPaths(indexPaths!)

它说:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'无效更新:无效   第0节中的项目数。包含在项目中的项目数   更新后的现有部分(14)必须等于数量   更新前的该部分中包含的项目(14),加号或减号   从该部分插入或删除的项目数(0已插入,   1删除)并加上或减去移入或移出的项目数   该部分(0移入,0移出)。'

如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

您应首先从数组中删除元素,然后从UICollectionView中删除。

如果您使用checkSelectedImages来计算某个部分中的部分或项目数,请先从中删除该元素。