0

ビュー コントローラーには、絶えず積極的に更新されるデータ モデルがあります。

UItableview (storyTable) は、最新の変更を更新して反映するために頻繁に呼び出されます。

(単一の beginUpdates endUpdates のみを反映するようにコードを変更しました) - それでもクラッシュします

  [self.storyTable beginUpdates];
                if([deleteIndexPaths count]){
                    DLog(@"Table refresh delele rows :%@",deleteIndexPaths);

                    [self.storyTable deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationNone];


                }

                if ([addIndexPaths count]){
                    DLog(@"Table refresh add rows :%@",addIndexPaths);

                    [self.storyTable insertRowsAtIndexPaths:addIndexPaths withRowAnimation:UITableViewRowAnimationTop];

                }
                if ([changedIndexPaths count]){

                    DLog(@"Table refresh change rows :%@",changedIndexPaths);
                    [self.storyTable reloadRowsAtIndexPaths:changedIndexPaths withRowAnimation:UITableViewRowAnimationFade ];

                }
                [self.storyTable endUpdates];
                //[self.storyTable endUpdates];
                tableIsAnimating = NO;

        }

次のメッセージで時々クラッシュします: (ほとんどの場合、deleteRowsAtIndexPaths...)

* -[UITableView _endCellAnimationsWithContext:]、/SourceCache/UIKit/UIKit-2380.17/UITableView.m:1070 でのアサーションの失敗

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '無効な更新: セクション 0 の行数が無効です。更新後の既存のセクションに含まれる行数 (20) は、それに含まれる行数と等しくなければなりません更新前のセクション (20)、そのセクションから挿入または削除された行数 (0 挿入、10 削除) のプラスまたはマイナス、およびそのセクションに移動されたまたはセクションから移動された行数 (0 移動、0 移動アウト)。'

また :

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: 「行 20 をセクション 0 に挿入しようとしましたが、更新後にセクション 0 に 20 行しかありません」

質問: クラッシュを防ぐために保護コードを追加するにはどうすればよいですか?

4

2 に答える 2

-2

テーブルビューが変更されたのは、rowsatindexpath を削除したからではなく、データをリロードしたからではないと思います。つまり、deleterowateindexpath を使用しても、基本的な削除作業は行われません。

于 2014-03-06T07:37:55.180 に答える