2011-03-11 56 views
3

我很困惑這個方法的使用以及將它列爲(void)方法的文檔。NSIndexPath getIndexes方法....怎麼樣?

「返回索引路徑索引」

它還返回什麼呢?

豈不是:

- (NSIndexPath *)getIndexes:(NSUInteger *)indexes 

getIndexes: 提供的索引路徑的索引的參考。

- (void)getIndexes:(NSUInteger *)indexes 

參數 索引 指針爲無符號整數數組。返回時,索引路徑的索引。 供貨情況 適用於iOS 2.0及更高版本。 宣佈 NSIndexPath.h

回答

4

您必須分配大小爲[indexPath length]的NSUInteger數組並將其作爲參數傳遞。返回值將寫入那裏。你必須自己釋放陣列或者什麼都不做它是在堆棧中創建這樣的:

NSUInteger array[[indexPath length]]; 
[indexPath getIndexes: array]; 
+0

感謝大家的優秀答案!我現在明白了,謝謝。我選擇了Max的解答,即使這三個都是有效的 – user7865437 2011-03-11 11:43:38

+0

在這裏失去了陰謀?\t NSUInteger數組[[indexPath length]]; \t [indexPath getIndexes:array]; int len = sizeof(array)/ sizeof(NSUInteger); (@「%i」,len);無論我在給定的部分中有多少行,我所有的返回值都是2? – user7865437 2011-03-11 13:02:15

+0

索引路徑不存儲行數。它用於有效地訪問單元格。你需要使用[tableView numberOfRowsInSection] – Max 2011-03-11 13:41:16

2

也許下一句解釋的原因

這是開發商的責任分配內存爲C數組。

它實際上是一個指針C數組將與索引來填補你的,所以沒有理由另外從函數返回它 - 你已經知道它的地址。

可以使用的功能如下

NSUInteger indexCount = [indices count]; 
NSUInteger buffer[indexCount]; 
[indices getIndexes:buffer maxCount:indexCount inIndexRange:nil]; 
+0

Thomas,「開發人員有責任爲C數組分配內存。」沒有顯示在我看到的幫助? – user7865437 2011-03-11 12:14:39

+0

我已經在這裏看過這個類的引用http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/Reference/Reference.html – 2011-03-11 12:20:57

+0

啊,解釋它,開發人員指南省略那條線! – user7865437 2011-03-11 12:55:02

0

您發送消息NSIndexPath的一個實例,因此獲得一回也於事無補。 -getIndexes:方法使用索引路徑中的索引填充數組的'索引'。所以你可以這樣做:

NSUInteger *indexes = calloc([indexPath length], sizeof(NSUInteger)); 
[indexPath getIndexes:indexes]; 

之後,索引將被填充indexPath中的索引值。

0

最大,托馬斯和迦勒,我已經嘗試了所有三種方式並不能得到任何工作,所以也許發了公認的解決方案太快.....但可能更可能我只是沒有得到它?我無法獲得正確的數組大小,以便循環訪問我的表中所需的行。我會雖然calloc([indexPath長度],sizeof(NSUInteger))將爲一個5行的組將返回一個數組與5行,每行保存NSUintegr .....或者我到目前爲止離束它令人尷尬?

+0

索引路徑只指定一個部分和一行,而不是表中的所有行。您的表的數據源和委託一起工作以提供表的行,所以您應該已經知道有多少行並有權訪問其所有數據。 – Caleb 2011-03-11 13:50:47