#objective-c #cocoa
#objective-c #cocoa
Вопрос:
Я пытаюсь выяснить, как создать набор индексов, скажем (1, 2, 3), затем использовать его в
- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend
Это (NSIndexSet *)indexes
я не знаю, как использовать / создавать / заполнять индексами 1, 2, 3.
Должен ли я использовать метод класса или метод экземпляра?
Я перепробовал целую кучу способов, но понятия не имею, что я делаю…
Ответ №1:
Если индексы последовательны, как в вашем примере, вы можете использовать это:
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)];
Если нет, создайте изменяемый набор индексов и добавляйте индексы (или диапазоны) один за другим:
NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
[indexSet addIndex:3];
[indexSet addIndex:5];
[indexSet addIndex:8];
Комментарии:
1. Учитывая то, что вы написали, я снова и снова перечитывал документы для NSIndexSet, пока не понял их! Я думаю, что самая сложная часть — это не Cocoa, это изучение логики и тонкостей документации по коду!
2. Я думаю, что документация предельно ясна. С чем у вас возникли проблемы?
Ответ №2:
Для простых наборов индексов, которые содержат один индекс или группу индексов, которые могут быть представлены диапазоном (например, 1,2,3), вы можете создать их, используя методы NSIndexSet initWithIndex:
or initWithIndexesInRange:
(или их аналоги заводских методов). Если вы хотите создать более сложный набор индексов (т. Е. 1,5,7,8,9), вам нужно будет использовать NSMutableIndexSet, чтобы вы могли добавлять индексы и диапазоны после создания объекта.
Этот код создаст набор индексов, содержащий индексы 1, 2 и 3:
[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1,3)];
Смотрите ссылки на классы NSIndexSet и NSMutableIndexSet.
Ответ №3:
В Swift 3
let indexSet = IndexSet(integersIn: 1...3)
или для одного значения:
let indexSet = IndexSet(integer: 1)
или для непоследовательных значений:
var indexSet = IndexSet()
indexSet.insert(1)
indexSet.insert(3)
indexSet.insert(9)
Ответ №4:
Вот пример удаления выбранного индекса из локального массива с помощью NSMutableIndexSet
NSArray * arrSelectedSongs = [self.playListTblView indexPathsForSelectedRows];
//Delete From Array
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc]init];
for (NSIndexPath *indexPath in arrSelectedSongs)
{
[indexSet addIndex:indexPath.row];
}
[self.arrFiles removeObjectsAtIndexes:indexSet];
Ответ №5:
Также есть
[NSIndexSet indexSetWithIndex:1];