我有一个 detailViewController 和一个 MasterViewController。MasterViewController 是我拥有 UITableView 的地方。我的表格中有两个部分,顶部是项目列表,底部有一个条目,@“添加新行”。
@“添加新行”转到可以编辑 UITextField 的 detailViewController。然后当按下保存时,我这样做:
- (IBAction)saveButtonPressed:(id)sender {
if ([detailControllerDelegate respondsToSelector:@selector(setNewmap:)]) {
if (self.textField.text.length > 0) {
[self.textField endEditing:YES];
[detailControllerDelegate setValue:self.textField.text forKey:@"newmap"];
[self.navigationController popViewControllerAnimated:YES];
}
}
}
然后在 MasterViewController 中,
- (void)setNewmap:(NSString *)newmap {
if (![newmap isEqualToString:_newmap]) {
_newmap = newmap;
[self.maps addObject:_newmap];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.maps count] inSection:MAPS_SECTION];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
它在 reloadRowsAtIndexPaths 上崩溃并显示以下消息:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 3 from section 0 which only contains 2 rows before the update'
我不确定为什么会调用它。我认为当您执行 tableViewUpdates 时,您会更新模型,我使用self.maps addObject:newmap];
. 我记录了计数,计数是正确的。更新模型后,我认为您可以自由地重新加载行。
如果我不重新加载特定行,而只是在 tableView 上调用 reloadData,那么它不会崩溃。不知道这里有什么区别。就像我更新 self.maps 模型时没有更新 numberOfRowsInSection 委托方法一样。