Ios UITableView与UICollectionView在一行中重复使用第一行中的集合

Ios UITableView与UICollectionView在一行中重复使用第一行中的集合,ios,swift,uitableview,uicollectionview,uicollectionviewcell,Ios,Swift,Uitableview,Uicollectionview,Uicollectionviewcell,我有一个UITableView,每个单元格中都有一个UICollectionView 问题是该表重用了第一个单元格数据,因此它在最新的表单元格中显示第一个集合 UITableView代码- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdenti

我有一个UITableView,每个单元格中都有一个UICollectionView

问题是该表重用了第一个单元格数据,因此它在最新的表单元格中显示第一个集合

UITableView代码-

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! ProjectTableViewCell

    if !didIndex{
        cell.i = i
        i += 1
        if i >= projects.count{
            i = 0
            didIndex = true
        }
    }

    return cell
}
以及UITableViewCell中的UICollectionView-

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    photosAsset = (PHAsset.fetchAssets(in: assetCollections[i], options: nil) as AnyObject!) as! PHFetchResult<AnyObject>!

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! ProjectsCollectionViewCell

    let asset: PHAsset = self.photosAsset[indexPath.item] as! PHAsset

    PHImageManager.default().requestImage(for: asset, targetSize: self.assetThumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: {(result, info)in
        if result != nil {
            cell.imageView.image = result
        }
    })
    return cell
}
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
photosAsset=(PHAsset.fetchAssets(in:assetCollections[i],options:nil)作为AnyObject!)作为!PHFetchResult!
让cell=collectionView.dequeueReusableCell(带有reuseidentifier:“collectionCell”,for:indexath)作为!ProjectsCollectionViewCell
将asset:PHAsset=self.photosAsset[indexPath.item]设为!PHAsset
PHImageManager.default().requestImage(for:asset,targetSize:self.assetThumbnailSize,contentMode:.aspectFill,选项:nil,resultHandler:{(结果,信息)in
如果结果为!=nil{
cell.imageView.image=结果
}
})
返回单元
}
我检查了代码,它看起来像UICollectionView中的结果,cellForItemAt是可以的,所以我假设问题是重用表中的单元格,试图找到解决方案

谢谢大家!

已解决
我使用了indexPath.section

您不应该将索引分配给单元格-这可能非常脆弱。如果移动或删除单元格,会发生什么情况

看起来您正在使用
i
作为
assetCollections
中的索引,在这种情况下,为什么不

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! ProjectTableViewCell    
    cell.assetCollection = assetCollections[indexPath.section]
    return cell
}

func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
photosAsset=(PHAsset.fetchAssets(in:assetCollection,options:nil)作为AnyObject!)作为!PHFetchResult!
让cell=collectionView.dequeueReusableCell(带有reuseidentifier:“collectionCell”,for:indexath)作为!ProjectsCollectionViewCell
将asset:PHAsset=self.photosAsset[indexPath.item]设为!PHAsset
PHImageManager.default().requestImage(for:asset,targetSize:self.assetThumbnailSize,contentMode:.aspectFill,选项:nil,resultHandler:{(结果,信息)in
如果结果为!=nil{
cell.imageView.image=结果
}
})
返回单元
}

if!你想用
if实现什么!didIndex{
etc?问题是indexath.row始终为0,因为我在每个节中都有一行(用于集合),我正在尝试传递问题中不清楚的节索引。在这种情况下,只需更改为
cell.assetCollection=assetCollections[indexath.section]
。答案已更新以反映这一点。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    photosAsset = (PHAsset.fetchAssets(in: assetCollection, options: nil) as AnyObject!) as! PHFetchResult<AnyObject>!

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! ProjectsCollectionViewCell

    let asset: PHAsset = self.photosAsset[indexPath.item] as! PHAsset

    PHImageManager.default().requestImage(for: asset, targetSize: self.assetThumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: {(result, info)in
        if result != nil {
            cell.imageView.image = result
        }
    })
    return cell
}