我正在尝试使用谓词来获取我要搜索的数据位于 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
进行查询?更新:
从那以后,我发现这个 How to check if an objects is inside of a NSSet of objects by using predicateWithFormat in CoreData? 可能会解决所发布的问题,但我已经简化了太多。
我实际上拥有的是另一个实体,其中包含我正在搜索的一大堆细节,然后与我的“MyEntity”实体存在多对一关系。
我的搜索实体:
@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 与类别的多对多关系对其进行过滤。
最佳答案
要查找相关 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];
关于ios - 从实体具有 NSSet 的 coredata 中检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17015607/