cocoa macos nsindexset

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.



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.