我正在基于UICollectionView(GitHub link)构建iOS日历,基于您可以在this repo找到的日历。其背后的根本原因在Objc.io issue上有详细描述。
简而言之,该过程涉及创建一个NSFetchedResultsController,该控制器查询按天分组的事件,然后在(自定义的)UICollectionView中显示它们。
原始日历有以下不便:因为它基于NSFetchedResultsController中包含的部分,所以它只是将日期作为部分标题,但忽略没有事件发生的日期。在这种情况下,NSFetchedResultsController中包含的部分的index
匹配日历部分的1:1。
我进行了修改,以便根据日历日计算节标题,但现在NSFetchedResultsController中的各节和UICollectionView的各节之间不再存在1:1的对应关系。请记住,这些部分基于日期。
这是我现在正在做的方式,当我需要获取该部分的索引某一天时:
- (NSInteger)sectionForDate:(NSDate*)day
{
return [[self.fetchedResultsController.sections valueForKey:@"name"] indexOfObject:[NSString stringWithFormat:@"%@", day]];
}
这是一个问题:是否有更有效的方法从NSFetchedResultsController中获取节索引?
如果您认为我应该采用不同的方法,请告诉我。
答案 0 :(得分:0)
从FRC和数据源方法中获取不同的部分绝对没有问题。逻辑变得有点复杂,但它不是那么不寻常的模式。效率应该没有缺点。
我最近编写了一个应用程序,您甚至可以在显示所有日期或仅显示有事件的应用程序之间切换,类似于Apple的日历,在列表视图中也会跳过“空”日。