Как создать составной предикат в nsFetchRequest, который фильтрует по двум параметрам разных сущностей

Некоторая справочная информация о моей модели данных:

manufacturer <-->> item <<-->> tag

В настоящее время я генерирую список предметов по запросу извлечения:

- (NSFetchRequest*) rankingRequestForItem:(Item*)item {
    NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
    NSPredicate* p = [NSPredicate predicateWithFormat:@"SELF != %@",item.objectID];
    r.resultType = NSDictionaryResultType;
r.resultType = NSDictionaryResultType;

    r.propertiesToFetch = @[[self objectIDExpressionDescription],@"itemName",
                            [self rankingExpressionDescriptionForTags:[item mutableSetValueForKey:@"itemToTag"]]];

    r.predicate = p;
    r.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES]];

    return r;
}

Это создает список всех предметов. Я хочу отфильтровать его для элементов, которые имеют отношение к конкретному производителю. Поэтому я добавляю предикат после перечисления всех элементов и сортирует их по выбранному производителю.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemToMa = %@", selectedManufacturer];

Это работает, но захватывает много элементов, которые будут отфильтрованы. Я предполагаю, что с большими наборами данных будет все медленнее и медленнее, поскольку он будет искать все элементы, а не только те, которые связаны с одним производителем. Я хочу, чтобы отфильтровать элементы в начальном методе RankingRequestForItem.

Можно ли переместить вышеуказанный предикат с верхним предикатом и создать составной предикат?

1 ответ

Решение

Я не стал бы беспокоиться о производительности. Core Data справляется с этим довольно хорошо. Иногда порядок предикатов имеет значение, так что, возможно, сначала поместите фильтр производителя.

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

Другие вопросы по тегам