获取核心数据对象,其中一对多关系包含集合中的所有对象

Posted

技术标签:

【中文标题】获取核心数据对象,其中一对多关系包含集合中的所有对象【英文标题】:Fetch core data object where to-many relationship contains all objects in a set 【发布时间】:2012-10-25 14:01:29 【问题描述】:

我正在寻找一种简洁的方法来获取由其关系唯一标识的核心数据对象。例如,给定数据模型:

...给定一组NSManagedObject 节点,我想获取一个三角形,或者至少知道是否存在这样的 TriangleEntity:

NSSet *nodeSet = // a set of 3 NSManagedObject*s
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TriangleEntity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"corners CONTAINS ALL %@", nodeSet]; 

我不认为CONTAINS ALL 是正确的语法——而且我知道我可以解压 NSSet 并获取

@"corners CONTAINS %@ AND corners CONTAINS %@ AND corners CONTAINS %@", setObj1, setObj2, setObj3

...但这似乎很愚蠢。有没有更优雅的解决方案?

【问题讨论】:

【参考方案1】:

以下谓词查找所有角都在给定集合中的三角形:

[NSPredicate predicateWithFormat:@"ALL corners IN %@", nodeSet]

nodeSet 可以是 NSSetNSArray

【讨论】:

漂亮。您可以指向苹果文档以供参考吗?还是这只是经验之声? @SamHatchett:“ALL”和“IN”记录在“谓词编程指南”的Predicate Format String Syntax 中。如何正确组合这些是我的经验问题。 NSPredicate(format: "ALL contacts IN %@", selectedContacts) 导致控制台中出现“不支持的谓词”崩溃。 selectedContacts 是 NSManagedObjects 的 Swift 数组。这也是多对多的关系。有什么想法吗? @hgwhittle 在这里也一样。到目前为止你有什么解决办法吗?

以上是关于获取核心数据对象,其中一对多关系包含集合中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章

与包含的一对多关系的核心数据谓词

核心数据:获取特定对象的多对多关系中的所有实体?

Hibernate的一对多关联关系

核心数据:以一对多的关系获取实体的获取请求

获取对象是不是也获取核心数据中的关系对象

核心数据一对多关系在获取新对象后失去关系[重复]