Несколько NSFetchedResultController для одного UITable и CoreData Entity design - PullRequest
1 голос
/ 17 февраля 2012

Я занимаюсь разработкой приложения для iPad, в котором хранится информация о местах, отображаемых в виде таблицы.Пользователь сможет сортировать местоположения по Все (Отдельная секция в алфавитном порядке), Регион мудрый (Каждый регион как секция) и Тип мудрый (Каждый типкак раздел).Я использую отдельный NSFetchedResultController для каждого, так как «sectionNameKeyPath» должен быть задан во время инициализации.У меня сейчас 2 проблемы.Потратил более 1 недели на поиск, но решения, которые я нашел, создали больше связанных проблем.

1) Для любого обновления (например, установить местоположение как избранное) вместо NSFetchedResultsChangeDelete вместо NSFetchedResultsChangeUpdate указывается NSFetchedResultsChangeUpdate.

  • Во многих форумах говорится, что это известная ошибка, если мы используем несколько fetchedResultController
  • Единственный способ, которого я мог избежать, - это не использовать методы делегата и производить выборку заново для каждого изменения.Поэтому отсутствует только анимация просмотра таблицы.
  • Не все обновления возвращают делегатский ответ.Я иду правильным образом или есть лучший способ, которым я могу использовать один FetchedResultController?

2) сортировка табличного представления для Типы не может эффективно использовать FetchedResultController с текущим дизайном Entity.Текущий дизайн использования объектов Местоположение, типы и регион.Отношение к региону - отношение один ко многим.Но расположение к типам - это отношение многие ко многим в обоих направлениях.[Я пытался загрузить изображение дизайна объекта, но моя репутация не позволяет этого.]

  • Типы до Расположение отношение много ко многим в обоихнаправление.Поэтому не может дать sectionNameKeyPath, потому что типами является Set в Location entity.Так что я извлекаю из Типы сущности и получаю массив местоположений (набор) из этого.
  • Таким образом, numberOfRows может быть вычислено из set.поэтому я сортирую его с помощью компаратора.Я не уверен, что это правильный путь, поэтому прошу всех вас дать ценные советы по дизайну этой сущности.

1 Ответ

0 голосов
/ 13 июня 2014

Не совсем уверен, но у CoreData есть некоторые недостатки, когда дело доходит до уведомления об изменениях (что является отличной эксклюзивной функцией), но я обнаружил, что NSFetchedResultsChangeDelete не обязательно означает, что объект был удален из базы данных, этоозначает, что объект больше недоступен для извлеченных объектов либо потому, что он был удален, либо он больше не соответствует текущему предикату (условиям).Вы должны проверить это.

...