У меня было несколько ночных кошмаров с NSFetchedResultsController, и, пытаясь найти решение моей проблемы, обрисованной в общих чертах здесь , я натолкнулся на что-то необычное в данных, выбираемых fetchedResultsController, в частности sectionNameForKeypath
параметр.
Предположим, у меня есть объектная модель с двумя сущностями и отношениями, как показано ниже:
Элемент << -> Категория
Категория имеет атрибут (NSNumber *) с именем displayOrder
, который используется для разделения извлеченных экземпляров Item на разделы в табличном представлении:
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:moc
sectionNameKeyPath:@"category.displayOrder"
cacheName:nil];
Если бы я хотел как-то динамически манипулировать с выводом displayOrder
, очевидным выбором было бы перезаписать его метод получения и делать там все, что я хочу. Но проблема в том, что метод get для displayOrder
никогда не доступен во время fetchRequest или fetchedResultsController, даже если я указываю его в sectionNameForKeypath
, и я вижу, что fetchedResultsController использует его значения для разделения и отображения разделы.
Вот простой пример перезаписанного метода получения, который никогда не вызывается. Это было размещено в моем классе категории:
-(NSNumber*)displayOrder
{
NSLog (@"displayOrder getter called");
NSNumber *displayOrder = [NSNumber numberWithInt:0];
return displayOrder;
}
Я также пытался перезаписать awakeFromFetch
безрезультатно (также не вызывается, но меня это не удивляет, когда я выбираю экземпляры Item и получаю доступ к категории и ее атрибутам через отношения).
Итак, наконец, мой вопрос: как значения category.displayOrder
передаются в мой fetchedResultsController и есть ли способ для меня контролировать этот вывод?
Заранее благодарим вас за любые идеи, которые у вас могут быть!
1036 * Рог *