NSFetchedResultsController и создание NSFetchRequests - PullRequest
2 голосов
/ 19 августа 2009

У меня настроены основные данные для приложения iPhone без экземпляра NSFetchedResultsController.

Для этого я создал класс созданной модели для инкапсуляции всех основных запросов данных и конструирования NSFetchRequests / NSPredicates.

Это исключило весь код, специфичный для Core Data, из моего UITableViewController.

Теперь я хочу добавить NSFetchedResultsController, чтобы упростить заполнение секционированного UITableView.

Моя проблема заключается в следующем: во всех примерах я видел, что экземпляр NSFetchedResultsController является иваром UITableViewController. Это приводит ко всем операторам NSFetchedResults, созданным в UITableViewController.

Мне кажется, что это загромождает UITableViewController и добавляет еще одну ответственность.

Как вы справляетесь с этим?

Как выглядит ваш объектный граф при использовании NSFetchedResultsController?

Где вы строите свои NSP-предикаты?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2009

Обновление:

Я вернулся к созданию NSFetchedResultsControllers внутри UITableViewControllers.

Я также использовал категорию в NSManagedObjectContext для запросов. Кроме того, я помещаю больше логики в категории в моих подклассах NSmanagedObject.

В целом, я доволен архитектурой, которую я использовал в последнее время.


Оригинальный ответ:

Полагаю, я опубликую свое мнение по этому вопросу.

Так как NSFetchedResultsController является базовым классом, а не классом UIKit, он кричит мне модель.

То же самое для NSFetchRequest.

Похоже, что создание NSFetchRequest зависит от знания модели данных, о которой вы могли бы утверждать, что UITableViewController не должен знать.

Это привело меня к нескольким идеям о том, как должен выглядеть граф объектов.

Один из вариантов - создать подкласс NSFetchedResultsController и сделать его похожим на фабричный класс, где я возвращаю полностью настроенные экземпляры NSFetchedResultsController. Это сохраняет NSFetchRequest Construction.

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

Кажется, что оба эти параметра лучше соответствуют MVC, чем использование UITableViewController для выполнения этих задач.

0 голосов
/ 20 августа 2009

В моем классе моделей есть несколько методов, которые возвращают различные виды предикатов, но я создаю фактические NSFetchRequest и NSFetchedResultsController в подклассе UITableViewController. Причина, по которой я так поступаю, заключается в том, что пользователь может устанавливать параметры относительно того, какие критерии он хочет включить, так что это правильно элемент, связанный с контроллером представления, и контроллеру представления требуется легкий доступ к NSFetchedResultsController.

Если пользователь не имеет права голоса по этому вопросу, я бы просто получил UITableViewController, когда он загрузит NSFetchedResultsController.

...