Cry*_*tal 9 iphone uitableview
我有一个detailViewController和一个MasterViewController.MasterViewController是我拥有UITableView的地方.我的表中有两个部分,项目列表的顶部,底部有一个条目,@"添加新行".
@"添加新行"进入detailViewController,可以在其中编辑UITextField.然后当按下保存时,我这样做:
- (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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在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];
}
}
Run Code Online (Sandbox Code Playgroud)
它在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'
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这会被调用.我想当你做tableViewUpdates时,你更新了我做的模型self.maps addObject:newmap];.我记录了计数,计数是正确的.更新模型后,我认为您可以自由重新加载行.
如果我不重新加载特定的行,但只是在tableView上调用reloadData,那么它不会崩溃.不知道这里的区别是什么.就像我更新self.maps模型时,numberOfRowsInSection委托方法没有得到更新.
Nik*_*rma 34
我知道问题已经有一段时间了,但我认为问题可能是,reloadRowsAtIndexPaths依赖于表中这些行的先前存在并在内部删除,重新创建并将它们插入(在引擎盖下).因此,当您调用特定的重新加载而没有那些行已经在表中时,它正在尝试删除不存在的行.
我在集合视图中遇到了同样的问题.完全重新加载的原因是因为它刷新整个事物并且不依赖于先前状态,仅依赖于数据源的当前条件.
这是我对这个问题的看法.
小智 1
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section{}
Run Code Online (Sandbox Code Playgroud)
在这个方法中,您应该动态返回一个整数。在更新之前,您应该获取节中新的行数并将其返回。
| 归档时间: |
|
| 查看次数: |
14909 次 |
| 最近记录: |