2008-10-08 7 views
40

La méthode de classe pour créer un chemin d'index avec un ou plusieurs noeuds est:Comment créer les « indices » requis pour NSIndexPath: indexPathWithIndexes: longueur:

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

Comment créer les « indices » requis dans le premier paramètre?

La documentation l'a répertorié comme Tableau d'index pour constituer le chemin d'index mais il attend un (NSUinteger *).

Pour créer un chemin d'index de 1.2.3.4, s'agit-il simplement d'un tableau de [1,2,3,4]?

Répondre

59

Vous avez raison. Vous pouvez l'utiliser comme ceci:

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

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

désolé pour la question de débutant: ai-je besoin de [version indexSet] après utilisation? – Steve

+4

@Steve Pas dans ce cas. Vous trouverez la réponse à tous ces problèmes de gestion de la mémoire liés à Cocoa dans le Guide de programmation de gestion de mémoire pour Cocoa (http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html) . Parce que 'indexPathWithIndexes: length' n'a pas de 'new', 'copy' ou 'alloc' dans le sélecteur, les règles Cocoa spécifient qu'il renvoie une instance auto-libérée. –

7

Votre hypothèse est correcte. C'est aussi simple qu'un tableau C de NSUInteger. Le paramètre length est le nombre d'éléments dans le tableau d'index.

Les tableaux dans C sont souvent identifiés comme un pointeur (dans ce cas NSUInteger *) avec un paramètre de longueur ou un terminateur connu tel que \ 0 pour les chaînes C (qui est juste un tableau char).

44

Sur iOS, vous pouvez également utiliser cette méthode de NSIndexPath UIKit Additions (déclarée UITableView.h):

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

Aha! Documentation (en quelque sorte) pour l '"API non documentée" à propos de laquelle j'ai demandé dans un autre Q. Merci! :) – Olie

+2

c'est très bien documenté: http://developer.apple.com/iphone/library/documentation/uikit/reference/NSIndexPath_UIKitAdditions/Reference/Reference.html, cependant il est seulement disponible sur l'iphone (UIKit). – Intentss

+0

Cette méthode est déclarée dans NSIndexPath et non UITableView. – Matjan

3

Je l'ai fait en 2 lignes de code

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

Courte, propre et lisible. Code gratuit, ne le cogne pas.

+0

, fait mal à mes yeux –

Questions connexes