可以动态获取所有实体关系吗?

时间:2017-10-28 03:44:01

标签: core-data xcode9 swift4

使用Xcode 9 swift 4,是否可以动态获取实体的所有关系?我似乎无法找到任何可以从没有硬编码关系名称的实体获取所有关系数据的示例。

编辑:我想念 - 解释了原来的问题,修正如上。添加我的静态代码,它按名称而不是动态地抓取关系数据。

疾病是与另一个实体 Pathology_Organs 有很多关系 own_pathology_organs 的实体。

let pathology_organs = disease.own_pathology_organs?.allObjects as! [Pathology_Organs]
for pathology_organ in pathology_organs{
    pathologyArray.append(pathology_organ.name!)
}

1 个答案:

答案 0 :(得分:0)

NSManagedObject(或子类)的entity属性返回对象的NSEntityDescription。实体描述提供有关实体的详细信息,包括relationshipsByName属性,该属性返回字典,其中的键是关系的名称(对应的值是描述关系的NSRelationshipDescription个对象)。因此,要获取关系名称列表,您可以使用:

let relationshipNames = disease.entity.relationshipsByName.keys

您可以使用键值编码(.value(forKey:)和/或value(forKeyPath:))从对象中获取值:

for relationshipName in relationshipNames {
    let keyPathToNameAttribute = relationshipName + ".name"
    let relatedObjects = disease.value(forKey:relationshipName)
    let relatedObjectNames = disease.value(forKeyPath:keyPathToNameAttribute)
}