是否可以在 NSPredicate 中为 NSFetchRequest 使用父实体的属性?

Posted

技术标签:

【中文标题】是否可以在 NSPredicate 中为 NSFetchRequest 使用父实体的属性?【英文标题】:Is it possible to use a parent entity's property in the NSPredicate for a NSFetchRequest? 【发布时间】:2011-02-10 17:26:26 【问题描述】:

我有一个实体 A,如下所示:

@interface A : NSManagedObject



@property (nonatomic, retain) NSString *stringProperty;

有一个像这样的子实体 B:

@interface B : A


我想使用存储在 A 中的属性对 B 执行提取操作。如下所示:

NSManagedObjectContext *context = [delegate mainManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"B"     inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"stringProperty = %@", someString];
[request setPredicate:pred];

这可能吗?我目前收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath stringProperty not found in entity <NSSQLEntity B id=26>'

【问题讨论】:

您能否再描述一下您的实体层次结构并显示您正在使用的实际谓词? 我已经用更具体的代码 sn-ps 更新了我的问题。 【参考方案1】:

您需要拨打superentity吗?即

[NSPredicate predicateWithFormat:@"superentity.stringProperty = %@", someString];

或者您可以为您的获取请求获取实体 A 和 setIncludesSubentitles:YES

【讨论】:

感谢您的回复。在这么长时间没有人回应的地方,我继续前进,我记得,我只是改变了我的等级制度。当我有时间时,我会尝试您的解决方案并相应地接受您的回答。 我尝试使用 superentity.stringProperty 并得到以下错误:由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'keypath superentity.stringProperty not found in entity 另外,setIncludesSubentities:YES 不是一个选项,因为我只希望结果中有 B 个实体。【参考方案2】:

我刚刚在最新的 SDK (4.3) 中尝试了一个类似的示例,现在它可以工作了。我现在可以在子实体的谓词中使用父实体的属性。

【讨论】:

以上是关于是否可以在 NSPredicate 中为 NSFetchRequest 使用父实体的属性?的主要内容,如果未能解决你的问题,请参考以下文章

NSCompoundPredicate 的 NSPredicate 数组

连接字符串 NSPredicate 不能正常工作目标 c

核心数据查询值“不是零”不返回值等于 0 的对象

是否有一个 NSPredicate 来过滤具有一对多关系的模型(过滤多个)?

Swift NSPredicate SUBQUERY with NOT IN?

CloudKit,NSPredicate在私有容器中返回计数或确定是否存在任何记录?