0

私は使用しています- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath;

fromIndexPathセクションが空かどうかを検出します。もしそうなら、私は次のコードを持っています:

    NSString *fromSection = [sections objectAtIndex:fromIndexPath.section];
    [savedTable beginUpdates];
    NSIndexSet *indexSections = [NSIndexSet indexSetWithIndex:[sections indexOfObject:fromSection]];
    [savedTable deleteSections:indexSections withRowAnimation:UITableViewRowAnimationFade];
    [sections removeObject:fromSection];
    [savedTable endUpdates];

ただし、これによりアプリがクラッシュし、次のエラーが発生します。

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

エラーの内容から、(最初の) セクションを削除すると、登録されないため、2 番目のセクションの 4 行が最初のセクションに不適切に移動したと考えられます。セクションが削除されたことをどのように知らせればよいのでしょうか。そのため、4 行が最初のセクションに移動されました。これにより、NSInternalInconsistencyException エラーが停止します。

**編集: 削除されるセクションの下にセクションがある場合にのみアプリがクラッシュします。これが、より多くの行が「不適切に」追加される理由です。その場合、アプリを再起動すると、セクションは正常に削除されました。すべてが正常に見えます。

※問題解決しました。まず、更新を終了したときにデータベースを完全に更新しませんでした。しかし、それでもうまくいきません。-performSelector:withObject:afterDelay: を使用してセクションを削除するために 0.1 秒の遅延を使用したところ、うまくいきました。

4

2 に答える 2

1

これは通常、次の実装時に発生します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

削除しようとしているセクション インデックスの削除済みセクションの行数を返します。この呼び出しが「次の」セクションの行数を返すことを確認してください (これは、削除されたセクションのインデックスで行われます...)。

于 2013-06-21T21:01:59.573 に答える
0

numberOfRowsInSectionメソッドとメソッドが正しいかどうかを確認numberOfSectionsInTableViewして呼び出す[tableview reloadData]

于 2013-06-21T22:07:51.343 に答える