3

因此,当我输入下面的 if 语句时,我收到了 EXC Bad Access 错误。令人沮丧的是,我已经确认 indexPath 和 tableView 指向正确的位置。此外,完全相同的 if 语句在我的代码中的其他地方在同一个实现文件中使用,没有错误。

将不胜感激。

-(CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if([indexPath row] == ([tableView numberOfRowsInSection:[indexPath section]]-1))
    {
        return 44.0;
    } else {
        return 60.0;
    }                       
}
4

6 回答 6

0

[indexPath section]-1对于索引为“0”的部分,您无法访问。从此语句中删除 -1。

于 2012-06-09T05:54:25.317 回答
0
if([indexPath row] == ([tableView numberOfRowsInSection:[indexPath section]-1]))
    {
        return 44.0;
    } else {
        return 60.0;
    }            
于 2012-06-09T05:28:02.523 回答
0

根据您的逻辑[indexPath section]-1,第 0 部分的第一部分中的行数应为 -1

于 2012-06-09T05:28:12.883 回答
0

解决您的要求的更好解决方案不是询问 tableview 一个部分中有多少行,而是询问您的数据源有多少行。

因此,例如,如果您的数据源是一个数组,请检查 array.count (当然,您有一些其他数据源,因为您有部分,但您明白了)

于 2012-06-09T06:21:10.670 回答
0

我知道这是一个老问题,但将来可能对其他人有帮助。

解决方案:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSInteger numOfRowsInSection = [tableView.dataSource tableView:tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == (numOfRowsInSection - 1))
        return 44.0;
    else
        return 60.0;
}

解释:

发生的情况是系统再次调用的每个[tableView numberOfRowsInSection:[indexPath section]]调用都会[tableView heightForRowAtIndexPath:indexPath]创建一个无限循环,最终应用程序崩溃。

使用dataSource属性 oftableView来防止循环,如下所示:

[tableView.dataSource tableView:tableView numberOfRowsInSection:[indexPath section]]
于 2015-05-18T14:41:31.287 回答
-1

您正在使用 tableView 委托方法。试试这个:

 if([indexPath row] == ([self tableView:tableView numberOfRowsInSection:indexPath.section]-1))
于 2015-03-07T03:21:43.783 回答