2011-05-10 2 views
36

J'essaie de comprendre comment créer un ensemble d'indices de permet de dire (1, 2, 3) utiliser ensuite dansCocoa NSIndexSet: index multiples. Comment créer l'ensemble d'index, plusieurs index?

- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend 

C'est le (NSIndexSet *)indexes Je ne sais pas comment utiliser/créer/remplir avec les index 1, 2, 3. Devrais-je utiliser une méthode de classe ou une méthode d'instance?

J'ai essayé tout un tas de façons, mais je ne sais pas ce que je fais ...

Répondre

7

Pour les ensembles d'index simples qui contiennent un seul indice ou d'un groupe d'indices qui peuvent être représentés par une plage (c'est-à-dire 1,2,3), vous pouvez les créer en utilisant les méthodes initWithIndex: ou initWithIndexesInRange: de NSIndexSet (ou leurs équivalents de méthode d'usine). Si vous souhaitez créer un ensemble d'index plus complexe (c'est-à-dire 1,5,7,8,9), vous devrez utiliser NSMutableIndexSet pour pouvoir ajouter des index et des plages après la création de l'objet.

Ce code va créer un ensemble d'index contenant les indices 1, 2 et 3:

[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1,3)]; 

Voir les NSIndexSet et NSMutableIndexSet références de classe.

66

Si les indices sont comme consécutifs dans votre exemple, vous pouvez utiliser ceci:

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; 

Sinon, créez un index mutable définir et ajouter les index (ou plages), un par un:

NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
[indexSet addIndex:3]; 
[indexSet addIndex:5]; 
[indexSet addIndex:8]; 
+0

Avec ce que vous wr ote, j'ai lu les docs pour NSIndexSet encore et encore jusqu'à ce que je les comprenne! Je suppose que la partie la plus difficile n'est pas Cocoa, c'est apprendre la logique et la subtilité de la documentation de code! – noyfbja

+0

Je pense que la documentation est extrêmement claire. Avec quoi avez-vous eu des problèmes? –

0

Voici un exemple pour supprimer l'index sélectionné dans la matrice locale avec l'aide de NSMutableIndexSet

NSArray * arrSelectedSongs = [self.playListTblView indexPathsForSelectedRows]; 
//Delete From Array 
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc]init]; 
for (NSIndexPath *indexPath in arrSelectedSongs) 
{ 
    [indexSet addIndex:indexPath.row]; 
} 
[self.arrFiles removeObjectsAtIndexes:indexSet]; 
0

Il y a aussi

[NSIndexSet indexSetWithIndex:1]; 
2

Swift 3

let indexSet = IndexSet(integersIn: 1...3) 

ou pour une seule valeur:

let indexSet = IndexSet(integer: 1) 

ou pour les valeurs non consécutives:

var indexSet = IndexSet() 
indexSet.insert(1) 
indexSet.insert(3) 
indexSet.insert(9)