NSFetchedResultsController - KVO, UITableView и «дерево» - PullRequest
8 голосов
/ 20 января 2011

Я использую NSFetchedResultsController для реализации KVO для моего UITableView (что очевидно).Что я не могу понять, так это как использовать несколько сущностей - своего рода древовидную структуру - чтобы они присутствовали (ed) одновременно.

Вот мои настройки:

  • Entity1
    • DisplayName
    • RelationToEntity2
  • Entity2
    • DisplayName

сейчасЯ могу получить данные либо для представления - пока все хорошо.То, что я хочу, это иметь односекционный TableView (например, плоское представление) со следующей структурой:

  • Entity1 (Entry 1)
  • Entity2 (Entry 1)
  • Entity2 (Entry 2)
  • Entity1 (Entry 2)

Хотя это может выглядеть какбыть сделано через разделы, это не так.Оба объекта должны быть UITableViewCells.Может кто-нибудь, пожалуйста, укажите мне правильное направление, чтобы сгладить без потери фактической иерархии.

Ответы [ 2 ]

1 голос
/ 22 января 2011

Звучит так, как будто вы должны поддерживать свой собственный «плоский» источник данных.Возможно, сработает следующее:

Когда NSFetchedResultController сообщает, что был вставлен новый Entity1, вы вставляете Entity1 и связанные с ним Entity2 s, например, _flattenedArray, так что это выглядит так:

[<Entity1>, <related Entity2>, <related Entity2>...]

Где вы их вставляете, зависит от вас - это в значительной степени сводится к:

  1. построению подмассива, содержащего новый Entity1и связанные Entity2 объекты
  2. решают, куда в _flattenedArray вставить новый подмассив.
  3. вызвать reloadData или каким-либо другим способом сообщить tableView о новых данных

Когда объект Entity1 удален, удалите его и все последующие объекты Entity2, пока не встретите конец _flattenedArray или не столкнетесь с другим объектом Entity1.Это предполагает, что Entity2 никогда не является объектом "верхнего уровня".Если это так, вам нужно будет удалить только эти Entity2 объекты в отношении.

Когда объект Entity1 получает или теряет объект Entity2, вы можете сначала удалить объект Entity1 из _flattenedArray, затем вставьте его заново.Если это слишком эффективно, вместо этого выполните слияние.

0 голосов
/ 05 декабря 2017

Это именно та ситуация, чтобы использовать наследование сущностей. При извлечении родительского абстрактного объекта с контроллером извлеченных результатов все дочерние объекты могут отображаться таблицей. Используйте свойство порядка секций для отображения секций в том порядке, который вы предпочитаете. И использовать второе свойство сортировки для заказа в разделах. Приложение Notes делает это путем извлечения абстрактной сущности-контейнера и отображает учетные записи и папки, которые являются дочерними сущностями. Это разделы по учетной записи, и первая ячейка папки «Все iCloud» фактически является учетной записью. Папки имеют отношение к учетной записи, даже если они равны в дереве наследования сущностей.

...