В моей базовой модели данных у меня есть сущность, у которой есть атрибут даты, и, как следует из названия, я хотел бы сгруппировать эту сущность через (неделю) дней.Группа по будням с основными данными
Проблема заключается в том, что даты хранятся более или менее как временные метки, и я не знаю, как создать предикат, который может группировать/фильтровать мои объекты соответствующим образом.
Я выяснил, что мне, вероятно, придется делать выборку за каждый день, поэтому создан следующий метод. Код, который мне нужен, находится прямо посередине.
- (NSFetchedResultsController *)fetchedResultsController:(NSDate *)day {
if(fetchedResultsController != nil)
return fetchedResultsController;
// Create and Configure Request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// Predicate
// pseudo code where i'm clueless is marked by "<" and ">" - start
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"DateAttribute BETWEEN <first second of day> AND <last second of day>"];
// or
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<dayofmonth-month-year of DateAttribute> LIKE <dayofmonth-month-year of day>"];
[request setPredicate:predicate];
// pseudo code where i'm clueless is marked by "<" and ">" - end
// Sort descriptors
NSSortDescriptor *titleDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorName ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:titleDescriptor];
[request setSortDescriptors:sortDescriptors];
// create and init fetchResultsController
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
//Memory
[request release];
[titleDescriptor release];
[aFetchedResultsController release];
return fetchedResultsController;
}
Я бы очень признателен за любую помощь. Спасибо
благодарит за ваш ответ! «Если вы хотите группировать по дням, вы передаете DateAttribute в качестве аргумента sectionNameKeyPath при инициализации NSFetchedResultsController. Опять же, нет необходимости указывать предикат: вы автоматически получите разделы для дней». было бы здорово, если бы это сработало, но при этом оно группируется по значению DateAttribute (который включает в себя время, например, «2009-07-02 20:51:27 -0400») p.s.: моя конечная цель - получить список будних дней, а при нажатии одной из них все объекты, связанные с этим днем, открываются в другом представлении таблицы. – gabtub
Вы можете добиться этого, сохранив в своей сущности DateAttribute без времени, используя ту же технику, что и в моем примере кода: начиная с объекта NSDate (ваш DateAttribute), вы сначала извлекаете свои компоненты даты, а затем создаете другой объект NSDate, используя эти компоненты (поэтому он не содержит времени). Это последний объект NSDate, который вы храните в своей организации. Затем, восстанавливая объекты по их дневным работам, объясняется. –
сначала я не хотел модифицировать модель данных, так как она была указана кем-то другим, но, к счастью, оказалось, что нам действительно не нужно хранить время и дату, а только дату, поэтому я использовал части вашего примера code = > работает спасибо большое! – gabtub