0

私の iPad プロジェクトでは、テーブルの行をリロードできる必要があります。これは、ポップアップビューから選択された「ID」に応じて、テーブル行をリロードできるようにする必要があります。テーブル行はダイナミクスであり、UITextField が含まれています。[self.tableView reload] を使用しようとしましたが、何らかの理由で行が正しく更新されません。以前の「id」が所有していた UITextField プレースホルダーのようなものは変更されません。私が念頭に置いているのは、その特定のセクションのすべてのセルを削除し、新しい「id」でテーブルをリロードすることです。これを行うと、次の例外が発生しました。

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '無効な更新: セクション 0 の行数が無効です。更新後の既存のセクションに含まれる行数 (3) は、更新前のそのセクション (3) に、そのセクションから挿入または削除された行数 (0 挿入、3 削除) をプラスまたはマイナスします。

プロジェクトコード:

- (void)selectedArchiefID:(NSString *) value {
   [self.popOverController dismissPopoverAnimated:YES];

   // collects all available document indexfields
   int rowCount = [indexDefinities count];
   NSMutableArray *indexPaths = [[NSMutableArray alloc] init];

   for (int curIndex=0; curIndex < rowCount; curIndex++) {
       [indexPaths addObject:[NSIndexPath indexPathForRow:curIndex inSection:0]];
   }

   // deletes rows
   if ([indexPaths count] > 0) {
      [self.tableView beginUpdates];
      [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
      //[self.tableView deleteSections:0 withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates]; //crashes here
   }

   [self.tableView reloadData];
}

私が何を間違えたのか分かりますか?

4

1 に答える 1

0

テーブルビューのデータソースのデータを変更するのを忘れたようです。

テーブルビューのレイアウトを変更することはできません。

セクションを削除する場合は、最初にこのセクションをデータソースから削除する必要があります。NSMutableArray (データソース) のセクションを削除することで、これを簡単に行うことができます。

numberOfSectionsInTableView:または、返されるセクション (および行) の数を計算する大きな if then else モンスターを作成できますtableView:numberOfRowsInSection:

方法は関係ありませんが、テーブルビューを更新する前にデータを削除する必要があります。


もう 1 つ、1 つのメソッドで と の両方[self.tableView beginUpdates]; /*...*/ [self.tableView endUpdates];[self.tableView reloadData];使用することは、通常は役に立ちません。後者は、最初のものから得たアニメーション効果を殺します。

于 2011-02-23T08:22:23.837 に答える