Ios 核心数据:谓词中的对象

Ios 核心数据:谓词中的对象,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,在我的核心数据对象模型中,我有3个具有适当关系的实体,因此MyObject可以有许多MyObject属性,每个属性可以有一个MyObject属性图像 给定一个myObject,我想获取所有图像 我尝试使用以下谓词执行此操作,但得到一个空数组: [NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext]; [NSPredicate predicate

在我的核心数据对象模型中,我有3个具有适当关系的实体,因此MyObject可以有许多MyObject属性,每个属性可以有一个MyObject属性图像

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

我尝试使用以下谓词执行此操作,但得到一个空数组:

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

有什么想法吗?

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

// assuming the relationships are called 'myObjectProperties' and 'myObjectPropertyImage', respectively
NSSet *allImages = [myObject.myObjectProperties valueForKey:@"myObjectPropertyImage"];
请注意,如果对象图未加载到
myObject
实体的内存中,这可能会触发对数据库的额外访问。为了避免这种情况,请确保在对
myObject
的提取请求中设置了预提取关系键路径


我希望这有助于…

因为您手头有一个
MyObject
实例,它的关系路径是
myObjectProperties-->ObjectProperty-->>propertyImage
,您只需遍历这些关系即可。使用
valueForKeyPath:

因此:

NSArray *images=[myObjectInstances valueForKeyPath:@"myObjectProperties.propertyImage"];
(注意:您的属性名称可能有误,但您可以理解。)


一般来说,当图形中有对象可用时,永远不会提取。获取匹配谓词的对象的“拾取线程”,然后查找所有相关对象,并遵循相关对象的线程/关系

谢谢,这就完成了任务,是的,我仍然必须放弃我头脑中的“数据库思维”。)谢谢你的通则!这就是为什么我认为在谓词中放置托管对象没有多大意义