2010-05-16 13 views
4

J'apprends juste une programmation de base en Objective C et Cocoa. J'essaie d'obtenir des données de NSTableView. Sur la base de ce que je lis dans un tutoriel, je l'ai écrit ceci:Comment utiliser les SelectedRowIndex de NSTableView?

NSArray * items = [[itemsTableView selectedRowEnumerator] allObjects]; 

Mais j'ai appris que selectedRowEnumerator a été dépréciée déjà 10.3 Panther et que je devrais utiliser selectedRowIndexes.

Le problème est que je n'ai pas trouvé comment utiliser réellement le NSIndexSet retourné pour obtenir le même résultat qu'avec le code écrit ci-dessus. Donc, si quelqu'un pouvait me donner un pourboire, je serais très reconnaissant. Merci.

Répondre

2

Vous pouvez parcourir les index d'un NSIndexSet comme ceci:

- (void) goThroughIndexSet:(NSIndexSet *) anIndexSet 
{ 
    NSUInteger idx = [anIndexSet firstIndex]; 

    while (idx != NSNotFound) 
    { 
     // do work with "idx" 
     NSLog (@"The current index is %u", idx); 

     // get the next index in the set 
     idx = [anIndexSet indexGreaterThanIndex:idx]; 
    } 

    // all done 
} 
+0

Il y a aussi différentes méthodes de 10,6 uniquement des blocs, mais je n'ai pas disparu près des blocs car j'ai toujours besoin de supporter 10.4 au minimum :( – dreamlax

+0

Eh bien, j'ai trouvé une solution plus élégante à mon problème, mais merci pour votre temps :) Quant aux blocs: Ne fonctionnent-ils pas sur 10.5 Léopard aussi? Parce que j'ai l'impression d'avoir lu quelque part qu'ils étaient backportés. –

+0

Jakub Lédl: Vous devriez également regarder la documentation de la classe NSIndexSet. Chaque classe Cocoa et Cocoa Touch possède une page documentant son interface publique. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSIndexSet_Class/ –

2

Pour illustrer plus clairement,

NSIndexSet *selectedRows = [MyTableView selectedRowIndexes]; 
    NSUInteger numberOfSelectedRows = [selectedRows count]; 
    NSUInteger indexBuffer[numberOfSelectedRows]; 

    NSUInteger limit = [selectedRows getIndexes:indexBuffer maxCount:numberOfSelectedRows inIndexRange:NULL]; 

    for (unsigned iterator = 0; iterator < limit; iterator++) 
    { 
     MyObject *object = [ myDataSource objectAtIndex:indexBuffer[iterator] ]; 

     NSLog(@"Object at index: %lu", (unsigned long) indexBuffer[iterator]); 
     NSLog(@"Object selected: %@", [object description]); 
    }