Если вы хотите сгруппировать по дням недели, проще всего добавить в вашу сущность атрибут типа «будний день»; затем вы передаете "weekday" в качестве аргумента sectionNameKeyPath при инициализации NSFetchedResultsController. В этом случае указывать предикат не нужно: вы автоматически получите разделы для рабочих дней.
Если вы хотите группировать по дням, вы передаете DateAttribute в качестве аргумента sectionNameKeyPath при инициализации NSFetchedResultsController. Опять же, нет необходимости указывать предикат: вы автоматически получите разделы для дней.
То, что вы пытаетесь сделать в своем коде, отличается от того, что вы просили. Действительно, вы не пытаетесь вернуть разделы (то есть группировать по атрибуту): вместо этого вы пытаетесь вернуть один раздел для вашего tableView, содержащий объекты, описываемые вашей сущностью, удовлетворяющие конкретному предикату, а именно те, чей DateAttribute падает (вероятно ) в текущий день. Для этого вы можете использовать следующий код:
// start by retrieving day, weekday, month and year components for today
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];
// now build a NSDate object for the input date using these components
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate *thisDate = [gregorian dateFromComponents:components];
[components release];
// now build a NSDate object for tomorrow
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate:thisDate options:0];
[offsetComponents release];
NSDateComponents *tomorrowComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:nextDate];
NSInteger tomorrowDay = [tomorrowComponents day];
NSInteger tomorrowMonth = [tomorrowComponents month];
NSInteger tomorrowYear = [tomorrowComponents year];
[gregorian release];
// now build the predicate needed to fetch the information
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"DateAttribute < %@ && DateAttribute > %@", nextDate, thisDate];
Этот предикат будет извлекать ровно все объекты, атрибут DateAttribute которых относится к текущему дню. Надеюсь, это поможет.