【问题标题】:Possible to dynamically fetch all entity relationships?可以动态获取所有实体关系吗?
【发布时间】:2017-10-28 03:44:01
【问题描述】:

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

编辑:我没有解释我原来的问题,上面已修复。添加我的静态代码,它按名称而不是动态获取关系数据。

Disease 是与另一个实体 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!)
}

【问题讨论】:

  • 标准获取请求将返回所有属性(尽管最初是错误的)。这在哪些方面不能满足您的需求?
  • 感谢您的回复。我昨晚一定很累。上面更新的问题。基本上我想知道是否有一种方法可以遍历实体以动态获取所有关系数据,而不是像上面的代码那样对每个关系进行硬编码。
  • 抱歉,澄清一下,您是要查找Disease 实体上的所有关系(其中own_pathology_organs 是您硬编码的一个)还是查找name 的所有值与您的disease 相关的Pathology_Organ 对象的属性?
  • 第一个:Disease实体上的所有关系。

标签: core-data xcode9 swift4


【解决方案1】:

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)
}

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多