検索バーのあるテーブル ビューがあります。最初に、テーブル ビューにはすべて (10 個) のアイテムが表示されます。セルを選択すると、詳細ビューがナビゲーション コントローラー スタックにプッシュされ、[戻る] ボタンをタップしてテーブル ビューに戻ることができます。検索テキストをまだ入力していない限り、テーブル ビューにはすべてのアイテムが表示され、詳細ビューとテーブル ビューの間を無期限に行き来できます。
検索バーにテキストを入力すると、テーブル ビューが self.searchDisplayController.searchResultsTableView で正しく更新されます (現在 8 項目しか表示されていないとします)。
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
8 回呼び出されます (セクション 0、行 0 ~ 7)。罰金。
次に、セルをタップして詳細ビューを表示し、8 つのアイテムを表示するテーブル ビューに戻ることができます。
次に、まだ 8 つの項目が表示されているテーブル ビューのセルを選択すると (以前と同じセルでも別のセルでもかまいません)、詳細ビューが再び表示され、[戻る] ボタンをタップします。
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
セクション 0、行 8 に対して呼び出されますが、これはsearchResultsTableView
まだ検索から 8 項目 (行 0 から 7) しか表示されないため、存在しません。
何が起こっているのかよくわかりません:
- 検索が正しく機能し、
- しかし
cellForRowAtIndexPath
、「間違った」indexPathで呼び出されます
編集: 2 つのテーブル ビューを混同するという前提を削除しました。
編集 2: これは cellForRowAtIndexPath です。「Zeichen」は DAO です。getZeichenForIndexPath:indexPath は、検索結果から正しいインスタンスを返します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell" ];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SearchResultCell"];
}
Zeichen *zeichen = [self getZeichenForIndexPath:indexPath];
UIImage *img = [UIImage imageNamed:zeichen.filename];
cell.imageView.image = img;
cell.textLabel.text = [zeichen description];
return cell;
}