Основные данные: может ли NSFetchedResultsController получить два разных объекта? - PullRequest
24 голосов
/ 30 июня 2010

Я работаю над приложением для iPhone, и в конкретном представлении мне нужно загрузить две разные сущности: одну, которая заполнит UITableView, и другую, которая заполнит UITextView.

Можно ли получить оба свойства, используя один NSFetchedResultsController?

Или мне нужно использовать два разных NSFetchedResultsController с?

Есть идеи, как лучше всего подойти к этой проблеме?

Ответы [ 4 ]

15 голосов
/ 30 июня 2010

Каждый запрос выборки имеет только одну сущность, а каждый контроллер результатов выборки имеет только одну выборку. Следовательно, вам нужны отдельные контроллеры для каждой сущности.

Если подумать, как бы вы создали предикат для выборки двух логически отдельных сущностей?

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

8 голосов
/ 30 июня 2010

Как заявил TechZen, ответ - нет.

Тем не менее, вы можете самостоятельно отслеживать сейфы NSManagedObjectContext и реагировать на них. Если вам действительно нужно наблюдать более одного объекта (что гораздо чаще встречается на iPad, чем на iPhone), то добавьте наблюдателя NSNotification на NSManagedObjectContextDidSaveNotification и посмотрите на -userInfo из NSNotification, который возвращается. Затем вы можете запустить предикаты для результатов, чтобы определить, нужно ли обновлять отображение. Это то, что NSFetchedResultsController делает под одеялом.

3 голосов
/ 23 июля 2014

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

2 голосов
/ 26 декабря 2013
The quick answer is NO. But I found a creative answer.

В вашем tableViewController создайте панель поиска с указанием количества имеющихся у вас областей.

Когда выбрана другая область, вы можете выбрать разные объекты!

Это работает, потому что я сделал такое приложение!

Пользователям будет проще разделить две разные данные!

...