Определить NSIndexPath с UITableView и NSFetchedResultsController - PullRequest
0 голосов
/ 17 января 2012

Испытывает небольшую странность в получении NSIndexPaths и надеется, что опытный читатель сможет объяснить.

Базовый сценарий - это UITableView, данные поступают через NSFetchedResultsController.Я пробую несколько подходов к достижению расширения / свертывания разделов. Например, в табличном представлении изначально отображаются только представления заголовков разделов.Пользователь нажимает на заголовок раздела, затем строки для этого раздела вставляются в tableView.

Почему это не работает должным образом?Предположим, мы передаем жизнеспособный sectionIndex, и в нашем разделе есть хотя бы одна существующая строка в модели.В целях иллюстрации у нас есть два пользовательских класса управляемых объектов (назовем их Parent & Child):

- (void)expandSectionWithIndex:(NSInteger)sectionIndex
{

NSIndexPath *pathToFirstRow = [NSIndexPath indexPathForRow:0 inSection:sectionIndex];
Child *aChild = [[self fetchedResultsController] objectAtIndexPath:pathToFirstRow];
NSSet *siblingGroup = [[aChild parent] children];  //assume we get a set of children

//logged here, pathToFirstRow = [1, 0];

NSMutableArray *pathsToInsert = [[NSMutableArray alloc] init];

for (Child *childToInsert in siblingGroup)
  {
    NSIndexPath *insertionPath = [[self fetchedResultsController] indexPathForObject:childToInsert];
    [pathsToInsert addObject:insertionPath];
    //logged here insertionPath = [0, 1];
  }

[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:pathsToInsert withRowAnimation:UIViewAnimationTop];
[[self tableView] endUpdates];
}

Предполагается, что раздел, который я передаю, имеет одну строку, и что при наблюдении отладчика мой aChildи childToInsert - один и тот же объект, почему indexPath, возвращаемый для идентичного объекта в моем NSFetchedResultsController, отличается, когда регистрируется внутри моего цикла?

Я могу вспомнить дюжину работ- но я хочу знать, почему ...

1 Ответ

0 голосов
/ 18 января 2012

Я думаю, что это связано с работой цикла for.Фактически вы создаете экземпляр childToInsert, который является частным для цикла.Я бы предположил, что в этом контексте возвращаемое indexPath этого объекта довольно непредсказуемо.

...