指定UITableView - iOS中的项目数

时间:2014-03-05 17:33:13

标签: ios objective-c uitableview nsarray

我有一个基本的表视图,显示来自多个数组的数据。

我的问题是,tableview需要知道它将显示多少个单元格,因此numberOfRowsInSection方法允许您指定它。

在我返回的numberOfRowsInSection方法中:

return [data_array count];

但是,我觉得这是错的。因为我们假设data_array有100个项目(0到99),那么[data_array count]会返回100吗?

如果是这样,我说得对,我确实需要做以下事情:

return ([data_array count] - 1);

通过以上操作,我确保我没有收到outOfBounds错误。

我是正确还是我在这里开始愚蠢?

2 个答案:

答案 0 :(得分:3)

实际上你拥有它的方式是正确的。如果你有一个数组[0-99],那实际上就是100个项目。您需要100行才能显示所有信息。

numberOfRowsInSection方法需要行数,而不是数组的基于0的索引。

您实际访问此数据的区域位于cellForRowAtIndexPath。在这里您可以获得基于0的indexPath,它将让您知道用于数据的索引。

实施例: 如果您的数组是@[@"1", @"2", @"3", @"4", @"5"]

您有5个项目,因此需要5行才能显示它们。

numberOfRowsInSection应返回[array count],即5。

cellForRowAtIndexPath将为您提供0个索引值,以便您执行以下操作:

NSString *currentData = array[indexPath.row];

其中indexPath.row将是0-4的值,因此没有outOfBound错误

答案 1 :(得分:0)

您认为正确的方式,但为了更清楚,count是面向位置的(从1开始),另一方面,数组中的元素是index oriented(从零开始)。

因此,numberOfRowsInSection预计将接收位置导向数字和indexPath处理index oriented数字以通过数组指示访问行的数据。

因此,返回[data_array count]而不是减去一个值是正确的。

查看documentation,它告诉委托函数期望得到与数组索引无关的元素数。