Cocoa 如何使用NSIndexSet

Cocoa 如何使用NSIndexSet,cocoa,foundation,nsindexset,Cocoa,Foundation,Nsindexset,在Objective-C中,我的程序打开一个窗口并显示一个表。我想突出显示表中的指定行 我该怎么做 我似乎需要密码 [myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)]; [myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)]; 我查看了开发人员文档,发现BOOL应该是NO 通过查看NSIndexSet文档,

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

我该怎么做

我似乎需要密码

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];
[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];
我查看了开发人员文档,发现BOOL应该是NO


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

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

NSIndexSet *indexes = [[NSIndexSet alloc] initWithIndex:rowToHighlight];
[myTableView selectRowIndexes:indexes byExtendingSelection:NO];
[indexes release];

请注意,索引必须全部为无符号整数(
NSUIntegers
)。

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

[myTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexes] 
         byExtendingSelection:NO];
我似乎需要密码

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];
[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];
没有;这些是没有任何东西可以投射的投射,这是无效的

删除强制转换并将值放在那里

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

是,因为您不想扩展选择,所以要替换它

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

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


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

这是正确的方法:

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];
或者您可以对随机索引使用
NSMutableIndexSet

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

等等。

re:casting无需任何转换:我认为他只是在复制(或视觉复制)Xcode生成的占位符代码。索引集不一定是单个连续范围。您可以使用单个索引或范围创建不可变索引集,但您可以使用可变索引集创建包含零个或多个单个索引和零个或多个范围的任意组合的索引集,当然,您还可以这样定制索引集的不可变副本;我特别说过,它们在内部是复数形式的nsrange。+1用于使用
NSMakeRange()
。本能是寻找类似于
NSRangeMake()
的东西,但不幸的是它并不存在。亲爱的选民们!我很荣幸能得到一些反馈,告诉我为什么你的手在向下的投票按钮上方颤抖,并最终点击它,因为——不管你相信与否——我不是一个能够理解它的读心术者。非常感谢。