2011-06-29 88 views
1

在我的核心数据对象模型中,我有3个具有适当关系的实体,以便MyObject可以有很多MyObjectProperties,每个属性可以有一个MyObjectPropertyImage。核心数据:谓词中的对象

给定一个myObject我想获取所有的图像。

我尝试使用以下断言它做,但我得到一个空数组:

[NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext]; 
[NSPredicate predicateWithFormat:@"ANY myObjectProperty.myObject == %@", myObject]; 

任何想法?

回答

2

使用核心数据时,最好将您的实体视为:对象图中的实体,而不是数据库中的表。因此,您不需要使用谓词来获取与其他人相关的实体。相反,使用模型中定义的关系导航对象图。要获得所有相关myObject图像:

// assuming the relationships are called 'myObjectProperties' and 'myObjectPropertyImage', respectively 
NSSet *allImages = [myObject.myObjectProperties valueForKey:@"myObjectPropertyImage"]; 

注意,这可能会引发更多的旅行数据库中,如果您的对象图不加载到内存中为您myObject实体。为了避免这种情况,请确保在您的获取请求中为myObject设置预取关系keypath。

我希望这有助于...

+0

谢谢,这样做的工作,是的,我仍然不得不放弃我的头脑中的“数据库思维”.. :) – Gytis

0

既然你手上有MyObject实例,它有myObjectProperties-->ObjectProperty-->>PropertyImages你只需要遍历关系的关系路径。这很容易与valueForKeyPath:

正是如此做到这一点:

NSArray *images=[myObjectInstances valueForKeyPath:@"myObjectProperties.propertyImage"]; 

(注:我可能有你的属性名称错了,但你能得到的想法)

作为一般规则,你永远不取时有可用的图表中的对象。您可以获取与谓词匹配的对象的“挑选线索”,然后查找跟随相关对象的线索/关系的所有相关对象。

+0

谢谢你的一般规则!这就是为什么我认为在谓词中放置一个托管对象没有什么意义 – Gytis