Метод класса для создания индексного пути с одним или несколькими узлами:
+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length
Как нам создать «индексы», необходимые для первого параметра?
В документации это указано как Массив индексов, составляющих индексный путь, но ожидается (NSUinteger *).
Чтобы создать индексный путь 1.2.3.4, это просто массив [1,2,3,4]?





Ваше предположение верно. Это так же просто, как массив C NSUInteger. Параметр длины - это количество элементов в массиве индексов.
Массивы в C часто идентифицируются как указатели (в данном случае NSUInteger *) с параметром длины или известным ограничителем, например \ 0 для строк C (который является просто массивом символов).
Ты прав. Вы можете использовать это так:
NSUInteger indexArr[] = {1,2,3,4};
NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexArr length:4];
@ Стив Не в этом случае. Вы найдете ответ на все вопросы управления памятью, связанные с Какао, в Руководстве по программированию управления памятью для Какао (developer.apple.com/mac/library/documentation/cocoa/Concept ual /…). Поскольку indexPathWithIndexes:length не имеет «new», «copy» или «alloc» в селекторе, правила Какао указывают, что он возвращает автоматически выпущенный экземпляр.
В iOS вы также можете использовать этот метод из NSIndexPath Дополнения UIKit (объявленный в UITableView.h):
+ (NSIndexPath*) indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section
Ага! Документация (своего рода) для "недокументированного API", о котором я спрашивал в другом вопросе. Спасибо! :)
он очень хорошо задокументирован: developer.apple.com/iphone/library/documentation/uikit/…, однако доступен только на iphone (UIKit).
Этот метод объявлен в NSIndexPath, а не в UITableView.
Вышеупомянутый метод идентичен следующему коду: NSUInteger indexes[] = {section, row}; [NSIndexPath indexPathWithIndexes:indexes length:2]; (Если вы ориентируетесь как на платформы iOS, так и на Mac, расширения NSIndexPath UIKit недоступны, поэтому вам нужно будет использовать этот подход вместо этого.)
Я сделал это в 2 строчки кода
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
for (int i = firstIndexYouWant; i < totalIndexPathsYouWant; i++) [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
Коротко, ясно и читабельно. Бесплатный код, не стесняйтесь.
я разобью вторую строчку на несколько, поранишь глаза
извините за вопрос новичка: мне нужно [indexSet release] после использования?