核心数据获取结果控制器和自定义部分标题

时间:2010-03-01 04:51:50

标签: iphone core-data nstableview nsfetchedresultscontroller sectionheader

我熟悉管理表行的NSFetchedResultsController的常见和基本用法,但我有一个有趣的问题。

我的数据是这样组织的:Schedule< --->>日< --->>路线。我目前有一个表视图,其中包含一个带有fetch控制器的Schedules,用于管理Schedules的创建和删除。我现在想为Routes / Days创建一个表视图。

我想在每一行列出一个路由,并创建与相关日内信息相对应的自定义部分标题。我可能通过获取所有路由,然后通过与相应日相反的关系将它们分开来一起破解某些东西,但我担心那时我将无法利用fetch控制器委托方法来更新表时管理对象改变。

有没有人有这方面的经验?关于如何前进的任何想法?

感谢。

2 个答案:

答案 0 :(得分:2)

NSFetchedResultsController就是为此目的而设计的,因此您不必发明轮子。

初始化NSFetchedResultsController时,应考虑指定sectionNameKeyPath。该属性正是您为自动生成该部分所需的属性。

在你的情况下,我会这样做:

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

你明白我的意思,如果你需要更多的代码来澄清,请告诉我。

答案 1 :(得分:0)

您需要通过为您创建的NSSet跟踪To Many关系,以表示数据库中的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只保存指定对象的实际ID。