我开发了一个简单的UITableView,它显示了一个项目列表。在这个UITableView的顶部,我创建了一个UIImageView形式的选择栏,它移动到用户选择的任何一行。我创建了两个按钮(一个向上,一个向下),它们也控制着这个选择条的移动。当用户单击向上按钮时,选择栏会向上移动一行,当用户单击向下按钮时,选择栏会向下移动一行。我的问题是,当我到达桌子的最顶端时,如果用户点击向上按钮,我希望选择栏移动到桌子的最底部,我希望选择栏移到最顶层表,如果用户单击向下按钮。两个按钮都调用相同的方法(我根据标签值区分两个按钮)。但是,当我这样做时,我得到以下运行时异常:
2013-06-06 11:34:03.124 SimpleTable[4982:c07] *** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableViewRowData.m:1630
2013-06-06 11:34:03.207 SimpleTable[4982:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x9489850> 2 indexes [0, 10])'
我不确定为什么会这样。这是我的相关代码,由我的向上和向下按钮调用:
- (IBAction)buttonClicked:(id)sender {
if([sender tag] == 1){
if (_index.row == 0) {
_index = [NSIndexPath indexPathForRow:[_tableData count] inSection:_index.section];
}
else
_index = [NSIndexPath indexPathForRow:_index.row - 1 inSection:_index.section];
[UIView animateWithDuration:.3 animations:^{
CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];
CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
_imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}];
}
else if([sender tag] == 2){
if (_index.row == [_tableData count]) {
_index = [NSIndexPath indexPathForRow:0 inSection:_index.section];
}
else
_index = [NSIndexPath indexPathForRow:_index.row + 1 inSection:_index.section];
[UIView animateWithDuration:.3 animations:^{
CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];
CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
_imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}];
}
}
谁能看到我做错了什么?
感谢所有回复的人。
答案 0 :(得分:0)
if (_index.row == [_tableData count])
假设_tableData
是为您的表提供数据的数组,那里的数据计数将比您上一个索引的行多一个,因为索引是从零开始的。
我的意思是,如果数组中有10个对象,则最后一行是第9行。
所以你的支票需要
if (_index.row + 1 == [_tableData count])
相反。