如何使用NSTableView的selectedRowIndexes?

时间:2010-05-16 10:07:47

标签: objective-c cocoa macos nstableview

我正在学习Objective C和Cocoa中的一些基本编程。我正在尝试从NSTableView获取一些数据。根据我在一个教程中读到的内容,我写了这个:

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

但后来我了解到{10}已经在10.3 Panther中弃用了selectedRowEnumerator,我应该使用selectedRowIndexes

问题是,我没有找到如何实际使用返回的NSIndexSet来获得与上面编写的代码相同的结果。

所以,如果有人能给我一个提示,我将非常感激。感谢。

2 个答案:

答案 0 :(得分:2)

您可以像这样循环遍历NSIndexSet的索引:

- (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
}

答案 1 :(得分:2)

最清楚地说明,

    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]);
    }