NSSortDescriptor и отношения ко многим - PullRequest
1 голос
/ 04 октября 2011

Я работаю с 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 вызывал этот метод?

1 Ответ

2 голосов
/ 04 октября 2011

Хорошо, поэтому Tag имеет атрибут title, и вы хотите отобразить табличное представление, полное статей, разбитых на разделы, где раздел является заголовком из тега?

Предполагается, что этоисправить короткий ответ, вы не можете.Сортировка не имеет смысла, потому что Article может и будет находиться в нескольких позициях сортировки.Если в статье есть тег Apple и Orange, где ее разместить?

...