TableView, отображающий записи из основных данных NSSet в правильном порядке - PullRequest
0 голосов
/ 10 января 2011

Я изучал это некоторое время и думаю, что есть ряд решений, но я не уверен, что они настолько хороши. Может быть, я что-то упустил: -)

У меня есть две таблицы. Для каждой записи в таблице A есть несколько записей в таблице B. То есть отношения один ко многим. Я наметил это в основных данных и сгенерировал классы. Пока все хорошо.

Мой пользовательский интерфейс на основе табличного представления должен выглядеть следующим образом:

Section 1
Cell 1: Table A: field1
Cell 2: Table A: field2
-----
Section 2
Cell 1: Table B: record 1: field1
Cell 2: Table B: record 2: field1
....

Когда я нахожусь в моем tableView:cellForRowAtIndexPath:, легко обрабатывать ячейки раздела 1, потому что они отличаются от одной записи таблицы А. Раздел 2 ячейки разные. Каждый раз, когда вызывается tableView:cellForRowAtIndexPath:, мне нужно получить правильную запись таблицы B из NSSet таблицы A. И это проблема.

NSSet doco указывает, что он не гарантирует заказ. Это означает, что если я хочу конкретную запись, основанную на индексе, у меня есть несколько возможных методов:

  • Добавьте дескриптор сортировки в запрос основных данных и используйте быстрое перечисление, чтобы получить нужную запись. Я не знаю, сработает ли это, потому что мы все еще работаем с NSSet.
  • Сортировка NSSet с использованием дескриптора сортировки после получения данных для создания NSArray и сохранения их в свойстве перед началом загрузки таблицы.
  • Сейчас я думаю о третьем варианте, который заключается в написании декоратора для NSSet, который действует как NSArray и позволяет мне указать поле сортировки и автоматически отслеживает изменения в NSSet. Хитрый, но может окупиться в долгосрочной перспективе.

ни один из этих ответов не кажется настолько великим. Есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

Если вам нужны ваши объекты, используйте средство доступа NSSet.

Если вы хотите отсортировать объект, настройте NSFetchRequest и добавьте соответствующие NSSortDescriptors.

Затем просто выполните выборкус executeFetchRequest:error:

Еще лучше, поскольку это специально для tableView, используйте NSFetchedResultsController для заполнения табличного представления.Вот для чего это.

0 голосов
/ 11 февраля 2011

Я получил NSArray, который хранится в контроллере и сортирует записи NSSet в него.

...