cocoa - Enumeración rápida en un NSIndexSet
macos (5)
¿Puedes enumerar rápidamente un NSIndexSet
? si no, ¿cuál es la mejor manera de enumerar los elementos en el conjunto?
En OS X 10.6+ y iOS SDK 4.0+, puede usar el mensaje -enumerateIndexesUsingBlock:
:
NSIndexSet *idxSet = ...
[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
//... do something with idx
// *stop = YES; to stop iteration early
}];
La enumeración rápida debe producir objetos; dado que un NSIndexSet contiene números escalares ( NSUInteger
s), no objetos, no, no se puede enumerar rápidamente un conjunto de índices.
Hipotéticamente, podría empaquetarlos en NSNumbers, pero luego no sería muy rápido.
Respuesta corta: no. NSIndexSet
no se ajusta al protocolo <NSFastEnumeration>
.
Un ciclo while debería hacer el truco. Incrementa el índice después de usar el índice anterior.
/*int (as commented, unreliable across different platforms)*/
NSUInteger currentIndex = [someIndexSet firstIndex];
while (currentIndex != NSNotFound)
{
//use the currentIndex
//increment
currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex];
}
NSTableView
que tiene una instancia NSTableView
(vamos a llamarlo *tableView
), puede eliminar varias filas seleccionadas de la *myMutableArrayDataSource
datos (uhm .. *myMutableArrayDataSource
), utilizando:
[myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];
[tableView selectedRowIndexes]
devuelve un NSIndexSet
. No es necesario comenzar a enumerar los índices en NSIndexSet
usted mismo.