视图控制器具有可持续且积极地更新的数据模型
经常调用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行 更新
问题:如何添加一些保护代码以防止崩溃?
答案 0 :(得分:1)
我认为这里的问题是,当同时删除,添加和更改混合时,在首次使用-endUpdates之后,indexPaths将全部出错。
你可以试试这个:
[self.storyTable beginUpdates];
if([deleteIndexPaths count]){
[self.storyTable deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationNone];
}
if ([addIndexPaths count]){
[self.storyTable insertRowsAtIndexPaths:addIndexPaths withRowAnimation:UITableViewRowAnimationTop];
}
if ([changedIndexPaths count]){
[self.storyTable reloadRowsAtIndexPaths:changedIndexPaths withRowAnimation:UITableViewRowAnimationFade ];
}
[self.storyTable endUpdates];
这样,indexPaths将在所有操作中有效。
答案 1 :(得分:-2)
我认为你的tableview更改不是因为你删除了或者是reloaddata,而是使用deleterowateindexpath而不执行基本的删除工作。