Qaz*_*lby 3 sqlite core-data nsset ios
我正在尝试使用谓词来获取我想要搜索的数据所在的数据 NSSet
@property (nonatomic, retain) NSSet *categories;
@property (nonatomic, retain) NSString *otherDetails;
@property (nonatomic, retain) NSNumber *id;
Run Code Online (Sandbox Code Playgroud)
该NSSet类别是从另一个实体组成,包含:
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *id;
Run Code Online (Sandbox Code Playgroud)
然后尝试通过谓词得到这个
NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@categories in %@", catList];
Run Code Online (Sandbox Code Playgroud)
其中catList是:
NSmutableArray *catList = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
并填充数据
这就是给我以下错误
'NSInvalidArgumetException', reason: 'unimplemented SQL generation for predicate: (categories IN {"this", "that"});
Run Code Online (Sandbox Code Playgroud)
我尝试将其更改为使用这样的NSSet字段
fetcher.predicate = [NSPredicate predicateWithFormat:@categories.name in %@", catList];
Run Code Online (Sandbox Code Playgroud)
但这没用.
如果我更改谓词使用NSString它不会出错,但由于数据不同,不会返回任何结果.
fetcher.predicate = [NSPredicate predicateWithFormat:@categories in %@", catList];
Run Code Online (Sandbox Code Playgroud)
那么我该怎么做才能使用谓词来进行查询NSSet呢?
更新:我已经找到了这个如何通过在CoreData中使用predicateWithFormat来检查对象是否在NSSet对象中?这可能会解决发布的问题,但我已经过多地解释了这个问题.
我实际拥有的是另一个实体,我正在搜索一大堆细节,然后与我的"MyEntity"实体有多对一的关系.
MySearchEntity:
@property (nonatomic, retain) NSNumber *searchField1;
@property (nonatomic, retain) NSNumber *searchField2;
@property (nonatomic, retain) MyEntity *myEntity;
@property (nonatomic, retain) NSNumber *id;
Run Code Online (Sandbox Code Playgroud)
和像这样的fetchrequest
NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MySearchEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@"myEntity.otherDetails CONTAINS %@ && searchField1 <= %f && searchField2 >= %f && myEntity.categories.name in %@", catList];
Run Code Online (Sandbox Code Playgroud)
所以声明的其余部分有效但我仍然无法通过MyEntities过滤它与类别的多对多关系.
要查找MySearchEntity相关MyEntity对象在给定集中至少有一个类别的对象,可以使用谓词
NSArray *catList = array of Category objects;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myEntity.categories IN %@", catList];
Run Code Online (Sandbox Code Playgroud)
或者,如果类别是按名称给出的:
NSArray *catList = array of NSString objects;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myEntity.categories.name IN %@", catList];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |