2

基になるNSFetchedResultsControllerを表示するUITableViewがあります。

fetchedResultsController が更新されると、

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {

と呼ばれます。そして、以下が実行されます。

  case NSFetchedResultsChangeInsert:
   [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:shiftedIndexPath] withRowAnimation:UITableViewRowAnimationFade];
   break;

cellForRowAtIndexPath は、新しい行に対してのみ呼び出されます (これは論理的です)。

ただし、問題は、テーブル ビューの行に表示されるすべての値が下に移動することです。最初の行にはそのタイトルが表示されます。2 行目には、1 行目のタイトルが表示されます。3 行目に 2 行目のタイトルなど。それを繰り返すと、3 行目には 2 行目のタイトル、4 行目には 3 行目のタイトルなどが表示されます。

特に cellForRowAtIndexPath は新しい行 (論理的) に対してのみ呼び出され、これらすべての行に対して呼び出されるわけではないため、何が起こるかわかりません。さらに、間違ったタイトルの行をクリックすると、正しいドキュメントが開きます (didSelectRowAtIndexPath は indexPath で正しく機能します)。

何が起こるかの手がかりはありますか?ありがとう!

4

2 に答える 2

0

デリゲート メソッドが呼び出される原因となっているコードは何ですか? このイベントの完全なライフサイクルを確認できるように、回答を編集してそのコードを追加してください。

于 2010-06-14T16:31:31.463 に答える
0

あなたの変更がTableViewで利用可能なすべての行に影響を与える必要がある場合は、間違いなく[tableView reloadData]を呼び出す必要があります

于 2010-06-17T07:59:10.337 に答える