2008-10-08 4 views
40

Die Klassenmethode einen Index-Pfad mit einem oder mehreren Knoten zu erstellen ist:Wie die „Indizes“, erforderlich für NSIndexPath erstellen: indexPathWithIndexes: Länge:

+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length 

Wie wir die „Indizes“ erstellen erforderlich der erste Parameter?

Die Dokumentation listet es als Array von Indizes, um den Indexpfad zu bilden, aber es erwartet ein (NSUinteger *).

Um einen Indexpfad von 1.2.3.4 zu erstellen, ist es einfach ein Array von [1,2,3,4]?

Antwort

59

Sie haben Recht. Man könnte es wie folgt verwenden:

NSUInteger indexArr[] = {1,2,3,4}; 

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexArr length:4]; 
+0

Sorry für Neuling Frage: Muss ich [IndexSet release] nach der Verwendung? – Steve

+4

@Steve Nicht in diesem Fall. Die Antwort darauf finden Sie in allen Cocoa-bezogenen Speicherverwaltungsproblemen im Memory Management Programming Guide für Cocoa (http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html). . Da 'indexPathWithIndexes: length' im Selektor nicht 'new', 'copy' oder 'alloc' enthält, geben die Cocoa-Regeln an, dass eine automatisch freigegebene Instanz zurückgegeben wird. –

7

Sie Annahme ist richtig. Es ist so einfach wie ein C-Array von NSUInteger. Der length-Parameter ist die Anzahl der Elemente im indexes-Array.

Arrays in C werden oft als Zeiger (in diesem Fall NSUInteger *) mit einem Längenparameter oder einem bekannten Terminator wie \ 0 für C-Strings (das ist nur ein Char-Array) identifiziert.

44

Auf iOS-Geräten können Sie auch diese Methode von NSIndexPath UIKit Additions verwenden (deklariert in UITableView.h):

+ (NSIndexPath*) indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section 
+0

Aha! Dokumentation (von Art) für die "undokumentierte API", über die ich in einem anderen Q gefragt habe. Danke! :) – Olie

+2

es ist sehr gut dokumentiert: http://developer.apple.com/iphone/library/documentation/uikit/reference/NSIndexPath_UIKitAdditions/Reference/Reference.html, jedoch ist es nur auf dem iPhone (UIKit) verfügbar. – Intentss

+0

Diese Methode wird in NSIndexPath deklariert, nicht in UITableView. – Matjan

3

ich diesen Code in 2 Zeilen hat

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 
for (int i = firstIndexYouWant; i < totalIndexPathsYouWant; i++) [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 

Kurz, sauber und lesbar. Freier Code, klopf es nicht an.

+0

Ich werde die zweiten Zeilen in mehrere aufteilen verletze mein Auge –

Verwandte Themen