我有一个基本的表视图,显示来自多个数组的数据。
我的问题是,tableview需要知道它将显示多少个单元格,因此numberOfRowsInSection
方法允许您指定它。
在我返回的numberOfRowsInSection
方法中:
return [data_array count];
但是,我觉得这是错的。因为我们假设data_array
有100个项目(0到99),那么[data_array count]
会返回100吗?
如果是这样,我说得对,我确实需要做以下事情:
return ([data_array count] - 1);
通过以上操作,我确保我没有收到outOfBounds
错误。
我是正确还是我在这里开始愚蠢?
答案 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,它告诉委托函数期望得到与数组索引无关的元素数。