Я знаю, что я не первый, кто задал этот вопрос, но я действительно в тупике.
В основном у меня есть экран с двумя кнопками. Каждая кнопка загружает данные в таблицу ниже по дате. При первом загрузке первого представления таблицы (по умолчанию выбрана левая кнопка), все отображается нормально. Если я нажму на правую кнопку, и я получу пустой стол, и я получу ошибку
Приобретенный объект с индексом x имеет имя раздела вне порядка "XXXXXX. Объекты должны быть отсортированы по имени раздела.
Возвращаясь к левому экрану таблицы, данные исчезли. Оба табличных поля пусты.
В каждом представлении таблицы есть 2 раздела в зависимости от времени начала элемента. Если я исключаю разделы, данные отображаются в порядке. К сожалению, мне они нужны. Данные сортируются по двум разделам следующим образом:
@interface NSString(agendaSessionKeyPath)
@property (nonatomic, readonly) NSString *sessionSection;
@end
@implementation NSString(agendaSessionKeyPath)
- (NSString *)sessionSection
{
int timeValue = [[self stringByReplacingOccurrencesOfString:@":" withString:@""] intValue]; //turns 11:00 to 1100
if (timeValue < 1200)
return @"Morning";
else
return @"Afternoon";
}
Запрос на выборку
- (void)viewDidLoad
{
//other viewDidLoad stuff
[self fetchSessions];
}
который сортирует данные с левой и правой кнопки в зависимости от даты:
- (void)fetchSessions
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate* date = nil;
if (selected == 0) //left button is selected
{
date = [dateFormatter dateFromString:@"2012-09-26"];
}
else if (selected == 1) //right button is selected
{
date = [dateFormatter dateFromString:@"2012-09-27"];
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date == %@", date];
[self.fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
извлеченный контроллер результатов
- (NSFetchedResultsController *)fetchedResultsController {
self.managedObjectContext = [[MATCDatabaseController sharedDatabaseController] managedObjectContext];
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Session"];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"title" ascending:YES];
NSSortDescriptor *timeSort = [NSSortDescriptor sortDescriptorWithKey:@"timeValue" ascending:YES];
[fetchRequest setSortDescriptors:@[timeSort, sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"startTime.sessionSection"
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
[self.fetchedResultsController setDelegate:self];
return _fetchedResultsController;
}
любая помощь приветствуется!