UItableViewRefreshで遭遇したピットについて:Invalid update

2264 ワード

今日出会った穴をまとめて、UITableviewの運用に十分熟練していると思って、今日テストでこの問題を私に捨てたくないとき、私はやはり長い時間をかけてこの問題を解決したので、この文章を書いて、後で同じ問題に直面する友达を助けたいと思っています.

1.テーブルのリフレッシュ

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)reloadData;
 , , , , , reloadData 。

2.ピットの説明

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

穴の位置をもう一度言います.
    [_tableView beginUpdates];
    [_tableView reloadSections:set
              withRowAnimation:UITableViewRowAnimationAutomatic];
    [_tableView endUpdates];
 , reloadData 。

ネットで長いこと調べても頼りになる答えが見つからなかったので、この年はやはり自分でしなければなりません.このリフレッシュは無効で、具体的にはsection 0の行数が無効であることを意味します.以下に具体的な理由を示すが,section 0はリフレッシュ前は1行であり,リフレッシュ後は0行となったがreloadSectionsのsetにはリフレッシュするsection 0が含まれていないため,表はリフレッシュ時にエラーを報告している.他の類似の問題の多くは、このようなデータの不一致によるものであるため、ローカルリフレッシュ時にテーブルデータが変更されたときに、すべての変更された領域、または行を含めてこそ、クラッシュを回避することができます.