Во-первых, у вас нет взаимных отношений, определенных между Details
и Lookup
, а только односторонняя Lookup
до Details
.Вам необходимо добавить отношение к объекту модели данных, работающему с Detail
до Lookup
, и установить его с обратным значением Lookup.searchResults
, а вашему классу Detail
необходимо свойство, похожее на:
@property (nonAtomic,retain) Lookup *lookup;
Наличие взаимных отношений позволяет вам находить Detail
объекты, начиная с объекта Lookup
, и позволяет вам находить объект Lookup
, начинающийся с объекта Detail
.
Если вы хотите, чтобы в табличном представлении отображался список Detail
объектов, вам необходимо настроить запрос выборки контроллера выборки для выборки против сущности Detail
.Как правило, вы всегда устанавливаете объект запроса выборки на объект, чьи объекты вы хотите отобразить в табличном представлении.
Предикат также будет запущен для сущности Detail
, поэтому вам нужен предикат, который оценивает путь ключа, начинающийся со свойства сущности Detail
.В этом случае нам нужны все объекты Details
, чей связанный объект Lookup
имеет атрибут search_phase
, равный предоставленному значению.Итак:
NSPredicate *p=[NSPredicate predicateWithFormat:@"lookup.search_phrase==%@", self.searchPhrase];
Теперь настройте ваш запрос на выборку следующим образом:
NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
NSEntityDescription *detailsEntity=[NSEntityDescription entityForName:@"Details" inManagedObjectContext:self.context];
[fetch setEntity:detailsEntity];
[fetch setPredicate:p];
//.. set up a sort however you want the details to appear in the tableview
Дайте эту выборку вашему NSFetchedResultsController, и он вернет Detail
объектов, которые вы ищете.
В итоге:
- Всегда используйте взаимные отношения в модели данных, чтобы иметь гибкость.
- При использовании контроллера выборочных результатов задайте объектполучить запрос к объекту, чьи объекты вы хотите отобразить в виде таблицы.