如何使用NSIndexSet

时间:2010-12-19 23:35:05

标签: cocoa foundation nsindexset

在Objective-C中,我的程序打开一个窗口并显示一个表格。我希望突出显示该表的指定行。

我该怎么做?

我似乎需要代码

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

我查看了开发人员文档,并发现BOOL应该是NO。

通过查看NSIndexSet文档,我无法弄清楚正确的语法应该是什么。

4 个答案:

答案 0 :(得分:73)

这将是正确的方式:

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

或者您可以将NSMutableIndexSet用于随机索引:

NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];
[mutableIndexSet addIndex:0];
[mutableIndexSet addIndex:2];
[mutableIndexSet addIndex:9];

答案 1 :(得分:5)

在调试器中打印NSIndexSet将向您显示它们在内部NSRange。要创建一个,您可以指定范围或单个显式索引(从中创建范围);

之类的东西
NSIndexSet *indexes = [[NSIndexSet alloc] initWithIndex:rowToHighlight];
[myTableView selectRowIndexes:indexes byExtendingSelection:NO];
[indexes release];

请注意,索引必须都是无符号整数(NSUIntegers,具体而言)。

答案 2 :(得分:4)

我使用工厂方法来避免管理内存:

[myTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexes] 
         byExtendingSelection:NO];

答案 3 :(得分:0)

  

我似乎需要代码

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

没有;那些是没有任何东西可以施放的演员,这是无效的。

删除强制转换并在其中放置值。

  

我查看了开发人员文档,并发现BOOL应为NO

是的,因为你不想扩展选择,你想要替换它。

  

通过查看NSIndexSet文档,我无法弄清楚正确的语法应该是什么。

与传递任何其他变量或消息表达式相同。

您需要创建一个索引集,然后将其存储在变量中并传递或直接传递创建消息的结果。