получение данных из coredata, где сущность имеет NSSet


Я пытаюсь использовать предикат для получения данных, где данные, которые я хочу искать, находятся в NSSet

@property (nonatomic, retain) NSSet *categories;
@property (nonatomic, retain) NSString *otherDetails;
@property (nonatomic, retain) NSNumber *id;

Категории NSSet составлены из другой сущности и содержат:

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *id;

Тогда попробуйте получить это через предикат

NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@categories in  %@", catList];

Где catList:

NSmutableArray *catList = [[NSMutableArray alloc] init];

И заполняется данными

Это дает мне следующую ошибку

'NSInvalidArgumetException', reason: 'unimplemented SQL generation for predicate: (categories IN {"this", "that"});

Я попытался изменить его, чтобы использовать поля NSSet, такие как

fetcher.predicate = [NSPredicate predicateWithFormat:@categories.name in  %@", catList];

Но это ничего не вышло.

Если я изменяю предикат на использование NSString, это не приводит к ошибке, но поскольку данные отличаются, результаты не возвращаются.

fetcher.predicate = [NSPredicate predicateWithFormat:@categories in  %@", catList];

Итак, что я должен сделать, чтобы использовать предикат для выполнения запроса на NSSet?

Обновление: С тех пор я нашел это Как проверить, находится ли объект внутри NSSet объектов с помощью predicateWithFormat в CoreData? это, возможно, решит поставленный вопрос, но я тоже немного упростил его много.

То, что у меня на самом деле есть, - это другая сущность с целой кучей деталей, которые я ищу, и которая затем имеет отношение "много к одному " с моей сущностью" MyEntity".

MySearchEntity:

@property (nonatomic, retain) NSNumber *searchField1;
@property (nonatomic, retain) NSNumber *searchField2;
@property (nonatomic, retain) MyEntity *myEntity;
@property (nonatomic, retain) NSNumber *id;

И fetchrequest, подобный этому

NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MySearchEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@"myEntity.otherDetails CONTAINS %@ && searchField1 <= %f && searchField2 >= %f && myEntity.categories.name in  %@", catList];

Таким образом, остальная часть утверждения работает, но я все еще не могу получить фильтр его по MyEntities много ко многим отношениям с категориями.

1 3

1 ответ:

Чтобы найти объекты MySearchEntity, где Связанный объект MyEntity имеет хотя бы одну категорию в заданном множестве, следует использовать предикат

NSArray *catList = array of Category objects;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myEntity.categories IN %@", catList];

Или, если категории заданы по имени:

NSArray *catList = array of NSString objects;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myEntity.categories.name IN %@", catList];