Если ваша модель данных имеет сущность Product
и сущность Category
и ваши выборки возвращают Category
объекты вместо Product
объектов, то для вашей выборки установлена неправильная сущность.
[ игнорировать следующие, поскольку это относится к другому типу поиска - techzen] Обычно вы создаете отдельную выборку для поиска, потому что каждый раз, когда пользователи вводят новые символы впоиск, предикат для выборки должен измениться.
Обновление:
Хорошо, я неправильно понял тип поиска, который вы выполняли.Вы фильтруете возврат существующей выборки вместо выборки на основе введенного поиска.
Глядя на предикат и модель данных в вашем обновлении, я думаю, что ясно, что предикат будет работать только с массивом Category
объектов.Это:
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"ANY products.nameEN CONTAINS[cd] %@", searchText];
... может фильтровать только Category
объекты, поскольку только у объекта Category
есть атрибут products
.Этот предикат говорит: «Сопоставьте все объекты Catergory, в которых любой связанный объект Product имеет значение атрибута nameEn, содержащее текст поиска».
Помните также, что фильтруемый здесь массив:
self.filteredListContent = [[[self fetchedResultsController] fetchedObjects] filteredArrayUsingPredicate:predicate];
... - это массив Category
объектов, а не Product
объектов.
Я думаю, вам нужно переосмыслить дизайн вашего интерфейса.По умолчанию для вашего TableView1 отображается список Category
объектов, но вы хотите, чтобы при поиске по этой таблице отображался список Product
объектов.Это запутает пользователя.Пользователь будет ожидать, что поиск по таблице Category
объектов вернет подмножество Category
объектов.
Однако в существующем проекте вы можете создать массив объектов Product
с текущим кодом, создав новый массив объектов Product
, применив оператор коллекции @distinctUnionOfObjects
:
self.filteredListContent = [[[self fetchedResultsController] fetchedObjects] filteredArrayUsingPredicate:predicate];
NSArray *distinctProducts=[self.filteredListContent valueForKey:@"products.@distinctUnionOfObjects.enName"];
... distinctProducts
теперь будет массивом Product
объектов, соответствующих критериям поиска.Используйте этот массив в configureCell:atIndexPath
(вам может понадобиться прибегнуть к нему.)