Lee*_*ert 5 core-data nspredicate nsfetchrequest
我有一个我精心设计的块谓词,只是为了发现你不能在核心数据中使用它们。
NSPredicate *rootContactPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
BOOL isPersonAndRoot = ([[[evaluatedObject entity] name] isEqualToString:@"Person"] && [[(Person*)evaluatedObject accounts] count] == 0);
BOOL isAccountAndRoot = ([[[evaluatedObject entity] name] isEqualToString:@"Account"] && [(Account*)evaluatedObject root] == nil);
return isPersonAndRoot || isAccountAndRoot;
}];
Run Code Online (Sandbox Code Playgroud)
所以我需要将其转换为标准字符串格式谓词,但我不清楚如何检查评估对象的实体类型。和实体是实体的子类,该Person实体是在获取请求中评估的类型。我希望它能看到子类型。AccountContact
看来现在您可以简单地比较谓词中的实体,提供托管对象实体作为值:
"entity = %@"
Run Code Online (Sandbox Code Playgroud)
之前:
你不能。原因是谓词需要转换,以便它可以在底层数据存储(可能是 SQLite)上运行。SQLite 数据库没有任何关于元素类型的数据,它只知道对象的键和值。
根据您尝试执行的操作,您需要针对超级实体中已知的键运行单个提取请求。或者您需要有 2 个提取请求,分别执行,然后合并 2 个结果集。
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |