Я хочу использовать три раздела для просмотра таблицы:
Новые проблемы = проблемы, о которых сообщалось в эту дату, независимо от статуса.
Активные проблемы = проблемы, о которых сообщалось до этой даты, по-прежнему требующие принятия последующих мер.
Закрытые проблемы = проблемы, о которых сообщалось до этой даты, не требующие принятия последующих мер.
У меня есть временное свойство, которое правильно сообщает разделы - 0,1,2 соответственно.
Я пробовал многочисленные способы заставить мой NSFetchedResultsController правильно сортировать результаты для отображения таблицы. Я считаю, что вы не можете отсортировать переходное свойство в NSFetchedResultsController, поэтому я попытался отсортировать так:
//create sort keys
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateStyle:NSDateFormatterShortStyle];
[df setTimeStyle:NSDateFormatterNoStyle];
NSString *nowString = [df stringFromDate:[NSDate date]];
NSDate *todayDateWithoutTime = [df dateFromString:nowString];
[df release];
NSSortDescriptor *sortIsNew = [[NSSortDescriptor alloc] initWithKey:@"dateReported" ascending:YES comparator:^(id obj1,id obj2){
NSDate *date1 = obj1;
NSDate *date2 = obj2;
NSComparisonResult comparisonResult;
if ([date1 timeIntervalSinceDate:todayDateWithoutTime] == 0) {
if ([date2 timeIntervalSinceDate:todayDateWithoutTime] == 0) {
comparisonResult = NSOrderedSame;
} else {
comparisonResult = NSOrderedAscending;
}
} else {
if ([date2 timeIntervalSinceDate:todayDateWithoutTime] == 0) {
comparisonResult = NSOrderedDescending;
} else {
comparisonResult = NSOrderedSame;
}
}
return comparisonResult;
}];
NSSortDescriptor *sortByFollowUp = [[NSSortDescriptor alloc] initWithKey:@"requiresFollowUp" ascending:NO];
NSSortDescriptor *sortByReportDate = [[NSSortDescriptor alloc] initWithKey:@"dateReported" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortIsNew, sortByFollowUp,sortByReportDate, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
Не уверен, что я правильно использовал блок, но в любом случае он никогда не вызывается, насколько я могу судить. Я положил туда несколько отчетов, но они не сообщают. Очевидно, дескрипторы «sortByFollowUp» и «sortByReportDate» работают, как и ожидалось, но не «sortIsNew». Если нет новых проблем, все работает нормально. В любом случае, когда появляются новые проблемы для этого первого раздела, приложение аварийно завершает работу, поскольку сортировка не соответствует разделам.
Я знаю, что могу сделать это очень легко с помощью прямых запросов на выборку и массивов. Кажется правильным использовать контроллер извлеченных результатов только для того, чтобы избежать вытягивания всей таблицы проблем в память, когда большинство из них не нужно, и только некоторые из них будут отображаться в любой момент. Неужели так сложно использовать его, когда вам нужны пользовательские разделы?