具有关系子实体属性的 NSPredicate

Posted

技术标签:

【中文标题】具有关系子实体属性的 NSPredicate【英文标题】:NSPredicate with relationship child entity property 【发布时间】:2014-04-30 13:44:55 【问题描述】:

我有这种模特情况-

    Group 实体与名为 latestEventEvent 实体处于一对一关系。 Event 实体有一个名为“WeddingEvent”的子实体,它是众多子事件之一。 WeddingEvent 是唯一一个拥有名为 present 的属性的人 如果latestEvent 属于“WeddingEvent”,我正在尝试过滤Group 以使其不被获取。

由于我无法通过 className 或 entityName 获取,我尝试过:

NSPredicate *LatestEventValidity = [NSPredicate predicateWithFormat:@"latestEvent.present != nil"];

 NSPredicate *LatestEventValidity = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary * bindings) 
        OOVGroup *group = evaluatedObject;
        return [group.latestEvent respondsToSelector:@selector(setPresent:)];
    ];

但他们都失败了。

这里有什么帮助吗?

【问题讨论】:

【参考方案1】:

第一个谓词不起作用,因为并非所有 Event 对象都响应“现在” 选择器。第二个谓词不起作用,因为您不能使用基于块的(或任何 核心数据获取请求中的基于 Objective-C 的谓词。

唯一的解决方案可能是为您的“事件”实体添加一个(字符串或整数)“类型”属性,以便您可以使用诸如"lastEvent.type != 'Wedding'" 之类的谓词进行过滤。

【讨论】:

感谢您澄清为什么我的尝试不起作用。你的想法很好,但我有遗留问题,因为那里的许多用户已经在使用这个应用程序,我想避免迁移。我所做的是将当前属性移动到轻量级迁移支持的父事件实体。谢谢

以上是关于具有关系子实体属性的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

使用父 NSManagedObject 上的关系枚举子实体 VS 使用 NSFetchRequest

使用基于属性的过滤子元素集获取核心数据实体

NSPredicate:“添加”一对多关系CoreData中所有实体的属性值

如何在不更新具有多对多关系的子实体的情况下保留父实体?

使用.Net Entity Framework 问题删除具有子关系的实体

如何更新CoreData中另一个实体的子实体