在我的核心数据对象模型中,我有3个具有适当关系的实体,因此MyObject可以有许多MyObjectProperties,每个属性可以有一个MyObjectPropertyImage。
给定myObject我想要获取所有图像。
我尝试使用以下谓词来做,但是我得到一个空数组:
[NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext];
[NSPredicate predicateWithFormat:@"ANY myObjectProperty.myObject == %@", myObject];
有什么想法吗?
答案 0 :(得分:2)
使用Core Data时,最好将您的实体视为:对象图中的实体,而不是数据库中的表。因此,您不需要使用谓词来获取与其他实体相关的实体。而是使用模型中定义的关系导航对象图。获取与myObject
相关的所有图像:
// assuming the relationships are called 'myObjectProperties' and 'myObjectPropertyImage', respectively
NSSet *allImages = [myObject.myObjectProperties valueForKey:@"myObjectPropertyImage"];
请注意,如果您的对象图未在内存中加载到myObject
实体,则可能会触发额外的数据库访问。为避免这种情况,请确保在myObject
的抓取请求中设置预取关系密钥路径。
我希望这会有所帮助......
答案 1 :(得分:0)
由于您手头有MyObject
个实例且关系路径为myObjectProperties-->ObjectProperty-->>PropertyImages
,因此您只需要遍历关系。使用valueForKeyPath:
所以:
NSArray *images=[myObjectInstances valueForKeyPath:@"myObjectProperties.propertyImage"];
(注意:我的属性名称可能有误,但您可以理解。)
作为一般规则,当图表中的对象可用时,您永远不会获取。您获取与谓词匹配的对象的“挑选线程”,然后查找跟随线程/关系到相关对象的所有相关对象。