だから私の状況はかなりユニークです。たくさんのタスクを含む To Do リスト アプリがあります。各タスクには UITableViewCell があります。各テーブル ビュー セルがタップされると、その行のインデックス パスのプロパティでタスクを使用してビュー コントローラーが作成されます。これらのView ControllerはすべてNSDictionaryに格納されています。これは、私が今言ったことのコード表現です:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
DetailViewController *detailVC;
if (![self.detailViewsDictionary.allKeys containsObject:indexPath]){
detailVC = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
[self.detailViewsDictionary setObject:detailVC forKey:indexPath];
detailVC.context = self.managedObjectContext;
}else{
detailVC = self.detailViewsDictionary[indexPath];
}
Tasks *task = [[self fetchedResultsController] objectAtIndexPath:indexPath];
detailVC.testTask = task;
[[self navigationController] pushViewController:detailVC animated:YES];
NSLog(@"%@", self.detailViewsDictionary);
}
したがって、一意のView Controllerを作成し、特定のキーで保存するこの方法は、ほとんどの場合機能します。ビューコントローラーを削除または移動すると、問題が発生します。
下にスクロール (デキュー) すると、セルのインデックス パスがリサイクルされるという印象を受けました。それは、各セルに番号識別子を付けると、同じ識別子に対して複数のセルが作成されるということではないでしょうか?
また、各View ControllerをindexPathキーで保存した場合、キーが2つのView Controllerに設定されていないことを確認するにはどうすればよいですか? 例えば。4 つのセルがあるとします。これは、4 つのビュー コントローラーを意味します。セル 3 を削除します。セル 4 はセル 3 のスポットに移動します。スポット 4 に移動する新しいセルを作成します。これで、同じ indexPath キーを持つ 2 つのコントローラーができました。どうやってこれを回避しますか?? 既に移動されたタスクが間違ったビュー コントローラー/セルにプロパティをロードしているため、現在アプリが台無しになっています。
以前、問題を解決するためにこれを提案されました:「テーブルの内容を「隠す」NSMutableArray を維持します。ただし、これが何を意味するのか、どのように実装するのかわかりません。