NSFetchedResultsController и наследование сущностей
У меня есть родительская сущность в событии моей модели. И две детские сущности: День Рождения, Юбилей. Я использую функцию наследования сущностей, встроенную в основные данные, так что родительский объект birthday и anniversary является событием.
Поэтому я делаю выборку, используя следующее:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
etc...
Теперь я хочу отсортировать fetchedObjects по типу события, дню рождения или годовщине.
Как мне это сделать? Я попробовал:
for (Birthday *birthday in _fetchedResultsController.fetchedObjects){
[birthdayObjects addObject:birthday];
}
for (Anniversary *anniversary in _fetchedResultsController.fetchedObjects){
[anniversaryObjects addObject:anniversary];
}
Но это просто добавляет все объекты в fetchedObjects к каждому массиву.
Есть идеи или я иду по этому неверному пути?
Обновление :
Понял это, используя следующее:
for (Event *event in _fetchedResultsController.fetchedObjects){
if ([event isKindOfClass:[Birthday class]]){
[birthdayObjects addObject:event];
}else{
[anniversary addObject:event];
}
}
Но если есть лучший путь, я готов к нему! Спасибо.1 ответ:
Имеют свойство только для чтения на
Event
, называемоеeventType
или подобное, которое возвращает строку. Класс событий возвращает одну строку, а дочерние события-День рождения, годовщину и все остальное для будущих типов событий.В вашем контроллере результатов выборки, если вы используете его, вы можете установить eventType в качестве пути ключа имени раздела, и это разделит типы на разделы для вас - переходные свойства, подобные этому, хороши для этой цели, но вы не можете использовать их как часть выборки запрос.
В приведенной выше ситуации используйте тип события в качестве предиката или дескриптора сортировки для обработки массива всех событий, возвращаемых из запроса выборки.
Если вам не нравится строка, вы можете использовать перечисление. Если вы хотите использовать тип события в запросе выборки, сделайте его атрибутом класса событий и установите его соответствующим образом на awakeFromInsert.