Вопрос по iphone, objective-c, xcode – Transient sectionNameKeyPath & NSSortDescriptor NSFetchedResultsController

16

У меня есть список задач в Core Data. Я извлекаю их в UITableView, используя NSFetchedResultsController.

Мне нужны пользовательские разделы в произвольном порядке:

  1. OVERDUE
  2. ACTIVE
  3. ONGOING
  4. POSTPONED
  5. COMPLETED

Чтобы определить, в какой раздел должна войти задача, я использую производный переходный атрибут, рассчитанный на лету на основе других атрибутов в относительном объекте.

К сожалению, вы не можете передать производное значение в качестве дескриптора сортировки, используемого запросом выборки. Это связано с тем, что выборка опирается на данные, которые запрашиваются для выборки. Цыпленок и Яйцо.

Я понимаю, почему я не могу этого сделать, что не помогает мне решить проблему!

Я пробовал:

  • Subclassing NSFetchedResultsController to 'customise creation of sections and index titles'. Maybe I'm doing this wrong however this just changes the names and orders of sections, not how many things go in those sections (which is critical).

  • Populating arrays per section and feeding them to the table (clunky, slow yet fully works).

  • Ripping out ongoing & postponed tasks (which works, but isn't ideal). This way I can sort by dueDate and drive the sectionNameKeyPath via the transient values.

У кого-нибудь есть идеи получше? Уже есть немало вопросов, подобных этому, но ни один из них не подходит для правильного решения.

Заранее спасибо!

ура

Одним из вариантов может быть - если вы уже извлекаете все задачи из данных Core - возможно, вы могли бы сохранить дополнительные атрибуты для каждой задачи - и если задача «на лету» раздел изменений - он также может быть обновлен в Базовых данных - таким образом - анимация переместится в правильный раздел controllerWillChangeContent: делегировать методы? Или я что-то упустил? Guntis Treulands

Ваш Ответ

1   ответ
10

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

Я понимаю, что это звучит так, как будто вы храните избыточную информацию, но помимо упрощения вашей логики, она также будет индексируемой, что ускорит доступ.

Этот ответ + Guntis Treulands & apos; комментировать мой вопрос прекрасно работает :) Timbo
Привет Денис, спасибо за ваш ответ. Поскольку изменение дат приведет к перемещению элементов в разные разделы, мне интересно, как бы я эффективно проверял / изменял атрибут раздела? Timbo

Похожие вопросы