0

のモデルデータがNSArray変更されていない場合、を呼び出すとreloadDataUICollectionViewセルは別の場所に表示されますか?

NSArrayがObj1、Obj2、Obj3を保持している場合、最初はObj1をUICollectionView最初に正しくマップし、Obj2を2番目にマップします。これは、正しいObjを取得するために使用するためcollectionViewCellの設定方法です。アレイから。cellForRowAtIndexPathindexPath.row

ただし、を呼び出すとreloadData、すべてのオブジェクトが間違ったUICollectionViewCellにマップされます(Obj1は2番目などの別の場所にcollectionViewCell配置され、Obj2は3番目などに終了しますcollectionViewCell)。

なぜこれが起こるのですか?ドキュメントに理由が見つかりませんでした。


さらに、モデル配列が変更されたときに同じ問題が発生します。たとえば、myNSArrayがObj1、Obj2、Obj3の場合、Objsの新しいインスタンスが作成され、NSArrayObj2、Obj3、Obj1などの順序が異なりますreloadData。問題。

Obj2は最初のマップに正しくマップされませんUICollectionViewCellが、代わりに別のマップにマップされますUICollectionViewCell

なぜこれが起こるのか誰もが知っていUICollectionViewsますか?

ありがとう!

編集:コードcellForRowAtIndexPath

- (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;
}
4

1 に答える 1

0

私は問題を理解しました。

以前、私はdequeuingセルであり、新しいモデルデータを設定していましたが、モデルデータがサブクラス化されたに正しく反映されていませんでしたUICollectionViewCell

サブクラス化されたのモデルデータを表すプロパティのsetterメソッドをオーバーライドする必要がありましたUICollectionViewCell。これらのオーバーライドされたメソッドでは、セルの適切なビューを更新することができました。

于 2013-01-04T04:35:45.510 に答える