Контроллер полученных из базовых данных результатов и заголовок пользовательского раздела - PullRequest
4 голосов
/ 01 марта 2010

Я знаком с общим и базовым использованием NSFetchedResultsController, управляющего строками таблицы, но у меня есть интересная проблема.

Мои данные организованы так: Расписание <--- >> День <--- >> Маршрут. У меня в настоящее время есть табличное представление, у которого есть Расписания с контроллером выборки, управляющим созданием и удалением Расписаний. Теперь я хочу создать табличное представление для маршрутов / дней.

Я хотел бы перечислить Маршрут в каждой строке и создать настраиваемые заголовки разделов, которые соответствуют информации в соответствующий день. Я мог бы, вероятно, взломать что-то вместе, выбрав все маршруты, а затем разделив их по обратному отношению к соответствующему дню, но я боюсь, что тогда я не смогу воспользоваться методами делегата контроллера выборки для обновления таблицы, когда изменение управляемых объектов.

У кого-нибудь есть опыт с этим? Любые идеи о том, как двигаться вперед?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

NSFetchedResultsController предназначен для этой цели, поэтому вам не нужно изобретать колесо.

Когда вы инициализируете свой NSFetchedResultsController, вы должны рассмотреть возможность указания sectionNameKeyPath. Это свойство именно то, что вам нужно для автоматического создания раздела для вас.

В вашем случае я бы сделал следующее:

NSEntityDescription: @"Route"
NSPredicate: @"day = %@"
NSFetchedResultsController: sectionNameKeyPath:@"route.day"

Вы понимаете, что я имею в виду, если вам нужно больше кода для пояснения, скажите мне.

0 голосов
/ 05 февраля 2011

Вам нужно исследовать, следуя взаимосвязи To Many через NSSet, который создан для того, чтобы вы представляли путь Route - >> Day в вашей базе данных. Предполагая, что вы назвали свои отношения isTraversedOn, а day-> Schedule как isScheduled, это будет что-то вроде:

Route *route=[self.fetchedResultsController.fetchedObjects objectAtIndex:0];
for (Day *day in route.isTraversedOn) {
   Schedule *schedule = day.isScheduled;
   NSLog(@"route is traversed on %@ according to schedule %@",day.name,schedule.name);
}

NSSet просто сохраняет фактические идентификаторы указанных объектов.

...