Как использовать определенный управляемый объект для создания дескриптора сортировки? - PullRequest
0 голосов
/ 17 ноября 2011

Объект B (Книга) имеет отношение один-ко-многим с объектом D (Описание). Идея состоит в том, что книга имеет разные описания для разных языков.

Я хочу отсортировать книги по названию (D.title) для заданного языка (D.languageID)

Если бы B имел отношение один к одному с D, я бы сделал что-то вроде:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"d.title" ascending:YES];

Конечно, вы можете сказать, что модель не препятствует тому, чтобы в книге было много описаний с одним и тем же languageID. Но в этом случае любое (например, первое) описание будет в порядке для меня. Или я могу получить нужный объект Description раньше, но как потом использовать его в сортировке?

Моя модель не так? Какое решение лучше в этом случае?

1 Ответ

0 голосов
/ 18 ноября 2011

Вы не можете сортировать по одному ко многим, как вы уже поняли. Самый «чистый» способ сделать это - реализовать собственную сортировку, которую вы можете выполнить в памяти после извлечения сущностей книги. Как только он окажется в памяти, вы можете сортировать его удобным способом, а не только данными.

Например, у вас может быть метод в подклассе Book, который называется -localTitle, который возвращает соответствующий заголовок из правильного описания. Оттуда вы можете сортировать по localTitle.

В основном:

  1. Вы бы создали NSFetchedResultsController для отслеживания изменений.
  2. При обнаружении изменения вы заново создаете массив, отсортированный по localTitle
  3. Вы указываете вашему представлению таблицы перезагрузить
  4. Ваше табличное представление питается от массива, а НЕ от NSFetchedResultsController.

Вы могли бы покончить с NSFetchedResultsController, но это немного сложнее.

...