从NSFetchedResultsController获取按日期分组的节索引的有效方法

时间:2014-06-15 14:10:56

标签: ios objective-c core-data

我正在基于UICollectionView(GitHub link)构建iOS日历,基于您可以在this repo找到的日历。其背后的根本原因在Objc.io issue上有详细描述。

简而言之,该过程涉及创建一个NSFetchedResultsController,该控制器查询按天分组的事件,然后在(自定义的)UICollectionView中显示它们。

原始日历有以下不便:因为它基于NSFetchedResultsController中包含的部分,所以它只是将日期作为部分标题,但忽略没有事件发生的日期。在这种情况下,NSFetchedResultsController中包含的部分的index匹配日历部分的1:1。

This calendar skips days

我进行了修改,以便根据日历日计算节标题,但现在NSFetchedResultsController中的各节和UICollectionView的各节之间不再存在1:1的对应关系。请记住,这些部分基于日期。

This is how I want to display the calendar

这是我现在正在做的方式,当我需要获取该部分的索引某一天时:

- (NSInteger)sectionForDate:(NSDate*)day
{
    return [[self.fetchedResultsController.sections valueForKey:@"name"] indexOfObject:[NSString stringWithFormat:@"%@", day]];
}

这是一个问题:是否有更有效的方法从NSFetchedResultsController中获取节索引?

如果您认为我应该采用不同的方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

从FRC和数据源方法中获取不同的部分绝对没有问题。逻辑变得有点复杂,但它不是那么不寻常的模式。效率应该没有缺点。

我最近编写了一个应用程序,您甚至可以在显示所有日期或仅显示有事件的应用程序之间切换,类似于Apple的日历,在列表视图中也会跳过“空”日。