2014-03-05 24 views
0

我有一個基本的表格視圖,它顯示了來自多個數組的數據。指定UITableView中的項目數 - iOS

我的問題是,tableview需要知道它將顯示多少個單元格,因此可以使用numberOfRowsInSection方法來指定它。

numberOfRowsInSection方法,我返回:

return [data_array count]; 

不過,我有一種感覺,這是錯誤的。因爲讓我們說data_array有100個項目(0到99),那麼會做[data_array count]返回100嗎?

如果是這樣,我說得對,我真的需要做到以下幾點:

return ([data_array count] - 1); 

通過做上述,我保證,我沒有得到一個outOfBounds錯誤。

我是對的還是我在這裏開始傻了?

+0

這完全取決於你的tableView實現:cellForRowAtIndexPath: – CodeReaper

+0

@CodeReaper幾乎沒有。如果一個單元格需要數組中的每個對象的一個​​單元格,那麼答案始終是'count'的返回值,而不是從中減去任何值。 – nhgrif

+0

如果你返回100,表格會詢問你的單元格0-99。就像'count'返回一個數組中的項數不是最大安全索引一樣,'numberOfRowsInSection'需要返回該部分中的行數,而不是最大安全索引。 – Kevin

回答

3

其實你的方式是正確的。如果你有一個數組[0-99],那實際上是100個項目。您需要100行才能顯示所有信息。

numberOfRowsInSection方法需要行數,而不是數組的0索引。

您實際訪問此數據的區域位於cellForRowAtIndexPath。這裏是你得到基於0的indexPath,它會讓你知道哪個索引用於數據。

例子: 如果陣列是@[@"1", @"2", @"3", @"4", @"5"]

你有5個項目,所以你需要5行顯示。

numberOfRowsInSection應該返回[array count],這是5

cellForRowAtIndexPath會給你0索引值,這樣你會怎麼做:從0-4

NSString *currentData = array[indexPath.row]; 

其中indexPath.row會值,所以沒有outOfBound錯誤

+0

非常感謝你埃裏:) – Supertecnoboff

0

你認爲的方式是對的,但爲了更清楚,count是面向位置的(從1開始),另一方面是數組中的元素是index oriented(從零開始)。

因此,numberOfRowsInSection預計會收到位置導向的數字,indexPath處理index oriented數字以訪問通過數組標記的行的數據。

因此,返回[data_array count]而不是少一個值是正確的。

看看documentation,它告訴委託函數期望得到與數組索引無關的元素數目。