Я работаю с NSFetchedResultsController
для отображения данных в UITableView. У меня есть отношение ко многим, которое выглядит примерно так:
Article
---->>
Tag
Одна статья имеет много тегов.
Я бы хотел заказать их так, чтобы все теги с заголовком «Банан» предшествовали тегам «Оранжевый», а затем теги «Apple» и т. Д. Заголовок является атрибутом тег.
Я подумывал об использовании NSSortDescriptor. Я реализовал метод под названием "position" в моем подклассе Tag NSManagedObject. Этот метод возвращает NSInteger, который описывает порядок тегов.
Проблема в том, что NSSortDescriptor не поддерживает отношения многие-многие. (Консоль гласит: «ключ to-many здесь не разрешен».) Вот что я попробовал:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"tags.tagText" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 position] > [obj2 position]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 position] < [obj2 position]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
Есть идеи, каков ответ? Как я могу выполнить сортировку на основе произвольного значения свойства другого объекта, которое связано через отношение ко-многим?
EDIT:
Теперь мне интересно, смогу ли я использовать метод в своем классе Article для помощи в сортировке. Я бы сделал что-то вроде этого:
- (NSInteger)position{
NSInteger aPosition = 100;
for (Tag *aTag in self.tags) {
if (position > [aTag position]) {
aPosition = [aTag position];
}
}
return aPosition;
}
Есть ли способ, чтобы мой NSSortDescriptor вызывал этот метод?