Как использовать NSIndexSet
В Objective-C моя программа открывает окно и отображает таблицу. Я хочу выделить указанную строку таблицы.
Как мне это сделать?
Мне кажется нужен код
[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];
Я посмотрел на документацию для разработчиков и понял, что BOOL должен быть NO.
Глядя на документы NSIndexSet, я не могу понять, какой должен быть правильный синтаксис.
4 ответа
Было бы правильно:
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];
или вы можете использовать NSMutableIndexSet
для случайных индексов:
NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];
[mutableIndexSet addIndex:0];
[mutableIndexSet addIndex:2];
[mutableIndexSet addIndex:9];
и т.п.
Распечатка 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)];
Нет; это броски без чего-либо, что недействительно.
Удалите приведение и поместите туда значения.
Я посмотрел на документацию разработчика и понял, что
BOOL
должно бытьNO
,
Да, потому что вы не хотите расширять выбор, вы хотите заменить его.
Глядя на документы NSIndexSet, я не могу понять, какой должен быть правильный синтаксис.
Так же, как для передачи любой другой переменной или выражения сообщения.
Вам нужно создать набор индексов, а затем либо сохранить его в переменной и передать его, либо передать результат сообщения о создании напрямую.