我有一个简单的两个实体核心数据数据库实体1 - 属性1 - 属性2实体2 - 属性1
这种关系是定义的,因此对于每个实体1,我都可以拥有许多实体2。
我已经通过UITATION VIEW选择了一个实体1-我现在想检索所有实体2记录。我正在尝试使用nspredicate尝试,但这似乎是错误的方式。这是该代码 - 无法调用NSPredicate的初始化:
lazy var entity2Predicate: NSPredicate = { return NSPredicate(format: "%K = %@", #keyPath(Entity1.relationship), ascending: true)}()
为与Entity相关的所有Entity2记录定义获取的正确方法是什么?
如果您的Entity2
始终与一个Entity1
完全相关,我认为实现此目的的最简单方法涉及在核心数据模型中定义Entity1
和Entity2
之间的一对多关系。
- 选择
Entity1
。在关系下,单击 按钮以添加关系。命名它有意义。由于您还没有告诉我们您的实体的真实姓名,因此我将在此示例中称为entityTwos
。 - 将关系类型设置为"对许多人"。
- 如果不需要
Entity1
具有任何Entity2
s,请与可选的关系设置关系。 - 将删除规则设置为"级联",以便在删除
Entity1
时,也会删除任何相关的Entity2
。 - 现在,选择
Entity2
。添加一个关系,给它一个名称(例如entityOne
(,并将其倒与步骤1中创建的关系的名称(此示例中的entityTwos
(。 - 取消选中选项,然后将类型设置为"一个"。将删除规则设置为"无效"。
您还需要为实体类中的关系添加属性。在Entity1
中:
@NSManaged var entityTwos: NSSet
在Entity2
中:
@NSManaged var entityOne: Entity1
这样做之后,您可以轻松访问与Entity1
相关的所有Entity2
,而无需任何查询,例如:
//here, entity1 is an instance of Entity1
entity1.entityTwos
真正很酷的是,您也可以以另一种方式走:
//here, entity2 is an instance of Entity2
entity2.entityOne