получение данных из 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 ответ:
Чтобы найти объекты
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];