Ios 核心数据:谓词中的对象
在我的核心数据对象模型中,我有3个具有适当关系的实体,因此MyObject可以有许多MyObject属性,每个属性可以有一个MyObject属性图像 给定一个myObject,我想获取所有图像 我尝试使用以下谓词执行此操作,但得到一个空数组:Ios 核心数据:谓词中的对象,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,在我的核心数据对象模型中,我有3个具有适当关系的实体,因此MyObject可以有许多MyObject属性,每个属性可以有一个MyObject属性图像 给定一个myObject,我想获取所有图像 我尝试使用以下谓词执行此操作,但得到一个空数组: [NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext]; [NSPredicate predicate
[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"];
(注意:您的属性名称可能有误,但您可以理解。)
一般来说,当图形中有对象可用时,永远不会提取。获取匹配谓词的对象的“拾取线程”,然后查找所有相关对象,并遵循相关对象的线程/关系 谢谢,这就完成了任务,是的,我仍然必须放弃我头脑中的“数据库思维”。)谢谢你的通则!这就是为什么我认为在谓词中放置托管对象没有多大意义