Iphone iOS UICollectionView重新加载数据错误地将模型映射到ViewCell
如果Iphone iOS UICollectionView重新加载数据错误地将模型映射到ViewCell,iphone,ios,uicollectionview,reloaddata,uicollectionviewcell,Iphone,Ios,Uicollectionview,Reloaddata,Uicollectionviewcell,如果NSArray中的模型数据没有更改,并且您在UICollectionView上调用reloadData,则单元格是否显示在不同的位置 我发现如果我的NSArray包含Obj1、Obj2、Obj3,那么首先,UICollectionView会正确地将Obj1映射到第一个collectionViewCell,Obj2映射到第二个,等等。这就是在cellforrowatinexpath中的设置方式,因为它使用indexPath.row从数组中获取正确的Obj 但是,当我调用reloadData时,
NSArray
中的模型数据没有更改,并且您在UICollectionView
上调用reloadData
,则单元格是否显示在不同的位置
我发现如果我的NSArray
包含Obj1、Obj2、Obj3,那么首先,UICollectionView
会正确地将Obj1映射到第一个collectionViewCell
,Obj2映射到第二个,等等。这就是在cellforrowatinexpath
中的设置方式,因为它使用indexPath.row
从数组中获取正确的Obj
但是,当我调用reloadData
时,所有对象都映射到错误的UICollectionViewCell(Obj1最终位于其他位置,例如第二个collectionViewCell
,Obj2最终位于第三个collectionViewCell
,等等)
为什么会发生这种情况?我没有在文档中找到原因
此外,当我的模型数组发生变化时,我也遇到了同样的问题。例如,如果my
NSArray
是Obj1、Obj2、Obj3,则会创建OBJ的新实例,并且现在的顺序不同,因此NSArray
是Obj2、Obj3、Obj1。。。然后我调用reloadData
,我面临同样的问题
Obj2没有像应该的那样映射到第一个UICollectionViewCell
,而是映射到另一个UICollectionViewCell
有人知道为什么在UICollectionViews
中会发生这种情况吗
谢谢
编辑:为cellforrowatinexpath
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MIAppCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MIAppCell" forIndexPath:indexPath];
// set model data
[cell setAppTitle:[(MIAppDO*)[self.apps objectAtIndex:indexPath.row] getAppTitle]];
return cell;
}
我解决了这个问题 早些时候,我对一个单元格进行了排队,并设置了它的新模型数据,但是模型数据没有正确地反映在子类
UICollectionViewCell
中
我需要重写我的属性的setter方法,这些属性表示我的子类
UICollectionViewCell
的模型数据。在这些被重写的方法中,我能够更新单元格的相应视图。显示用于collectionView:cellForItemAtIndexPath的代码:我没有看到此代码中有任何错误。您可以尝试记录indexath和[(MIAppDO*)[self.apps objectAtIndex:indexath.row]getAppTitle],看看它们是否给了您意想不到的东西。我已经尝试记录了这两个。对于第一个单元格,indexath.row是0,getAppTitle来自数组的第一个对象(索引0)。但是,UICollectionViewCell没有显示正确的标题,它显示了数组中其他位置的另一个对象的标题。我以前没有见过这种行为,所以我无法解释它。您可能想在自定义单元格中发布代码。感谢您为我指明自定义单元格的方向,我找到了答案