You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:两个UICollectionView重复显示数据源最后一项+索引越界问题求助

iOS开发:两个UICollectionView重复显示数据源最后一项+索引越界问题求助

嘿,我一眼就瞅出你代码里的核心问题啦!不管是重复显示最后一项还是索引越界,根源都是错误地使用了indexPath.count来获取当前cell对应的数据源索引,咱们一个个说:

1. ClothingVC 重复显示最后一项的问题

看你cellForItemAt方法里的这行代码:

let clotheslistItem: Garment = clothesList[indexPath.count]

这里的indexPath.count是用来获取indexPath这个对象包含的维度数量(比如它包含section和item两个维度,所以count固定是2),不管当前是哪个cell,你都在取数组的第2个索引(也就是clothesList[2],对应"Skirt 2"),自然所有cell都显示最后一项!

修正代码:把indexPath.count换成indexPath.item,这才是获取当前cell在section中对应项的索引:

let clotheslistItem: Garment = clothesList[indexPath.item]

2. ProfileSelectorVC 重复显示+索引越界问题

同样的坑你又踩了一遍,看这行:

let profile: Profile = profiles[indexPath.count-1]

indexPath.count还是固定为2,减1后是1,所以你每次都取profiles[1](对应"Betty"),所有cell自然都显示Betty。而当你的数据源长度小于2时,profiles[1]就会触发索引越界(比如数组只有1个元素,索引只能到0)。

修正代码:同样换成indexPath.item:

let profile: Profile = profiles[indexPath.item]

额外小提醒

indexPath的正确用法要记牢:

  • indexPath.section:获取当前cell所在的分段索引
  • indexPath.item:获取当前cell在分段中的项索引(TableView里对应的是indexPath.row)
  • indexPath.count:这个属性几乎不会在cell复用场景用到,它表示的是索引路径包含的层级数(比如section+item就是2层),和当前cell的位置完全无关!

另外你的ClothingVC里viewDidLoad调用clothesViewGrid.reloadData()其实可以去掉,因为CollectionView在视图加载完成后会自动调用数据源方法加载数据,不过这不是导致bug的原因。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:45:30