具有关系子实体属性的 NSPredicate
Posted
技术标签:
【中文标题】具有关系子实体属性的 NSPredicate【英文标题】:NSPredicate with relationship child entity property 【发布时间】:2014-04-30 13:44:55 【问题描述】:我有这种模特情况-
Group
实体与名为 latestEvent
的 Event
实体处于一对一关系。
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中所有实体的属性值