2011-05-10 12 views
36

estoy tratando de encontrar la manera de crear un conjunto de índices de digamos (1, 2, 3) y utilizarla enCocoa NSIndexSet: Índices múltiples. ¿Cómo crear el conjunto de índices, múltiples índices?

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

Es la (NSIndexSet *)indexes No sé cómo usar/crear/poblar con los índices 1, 2, 3. ¿Debo usar un método de clase o un método de instancia?

He intentado un montón de maneras, pero no tengo idea de lo que estoy haciendo ...

Respuesta

7

Para los conjuntos de índices simples que contienen un índice único o un grupo de índices que puede ser representada por una serie (es decir, 1,2,3), puede crearlos utilizando los métodos initWithIndex: o initWithIndexesInRange: de NSIndexSet (o sus contrapartidas del método de fábrica). Si desea crear un conjunto de índices más complejo (es decir, 1,5,7,8,9), deberá usar NSMutableIndexSet para poder agregar índices y rangos después de crear el objeto.

Este código va a crear un conjunto de índices que contiene los índices 1, 2, y 3:

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

véanse las referencias NSIndexSet y NSMutableIndexSet de clase.

66

Si los índices son consecutivos como en tu ejemplo, puede utilizar esto:

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

Si no es así, crear un índice mutable establecer y agregar los índices (o rangos), uno por uno:

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

Con lo que wr ¡Okey, leí los documentos para NSIndexSet una y otra vez hasta que los entendí! ¡Creo que la parte más difícil no es Cocoa, es aprender la lógica y la sutileza de la documentación del código! – noyfbja

+0

Creo que la documentación es extremadamente clara. ¿Con qué tienes problemas? –

0

Aquí está un ejemplo para eliminar el índice seleccionado de la matriz local con la ayuda 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

También hay

[NSIndexSet indexSetWithIndex:1]; 
2

En Swift 3

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

o para un solo valor:

let indexSet = IndexSet(integer: 1) 

o para valores no consecutivos:

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