0

だから私の状況はかなりユニークです。たくさんのタスクを含む 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 を維持します。ただし、これが何を意味するのか、どのように実装するのかわかりません。

4

2 に答える 2

1

古いデータベースで使用されていた手法を使用できます。NSInteger をクラス var として保存し、それを使用して、作成時に各セルに一意の ID を割り当てます。各セルを作成するたびに、一意の ID を増やします。このような:

あなたのインターフェースで:

@property (nonatomic, assign) NSUInteger nextUniqueId;

次に- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

cell.tag = self.nextUniqueId++;

次に、viewControllers でそれらのタグを追跡します。割り当て可能なプロパティを与えるか、init をカスタマイズして ID を含めます。

于 2013-08-15T05:55:34.553 に答える
0

インデックスパスメソッドで行のセルの各行にタグ値を設定することをお勧めします。そのタグ値をグローバルに保存し、そのタグを行選択メソッドで使用します。

于 2013-08-15T07:03:42.050 に答える