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没有显示正确的标题,它显示了数组中其他位置的另一个对象的标题。我以前没有见过这种行为,所以我无法解释它。您可能想在自定义单元格中发布代码。感谢您为我指明自定义单元格的方向,我找到了答案