Ios 根据Swift核心数据中的关系获取与特定实体相关的所有条目
我有一个简单的两实体核心数据数据库 实体1 -属性1 -属性2 实体2 -属性1 关系的定义使得对于每个实体1,我可以有许多实体2 我已通过UITableView选择了单个实体1 我现在想检索所有Entity 2记录。我正在尝试使用NSPredicate,但这似乎是错误的方法。。以下是无法为NSPredicate调用initialize的代码:Ios 根据Swift核心数据中的关系获取与特定实体相关的所有条目,ios,swift,core-data,Ios,Swift,Core Data,我有一个简单的两实体核心数据数据库 实体1 -属性1 -属性2 实体2 -属性1 关系的定义使得对于每个实体1,我可以有许多实体2 我已通过UITableView选择了单个实体1 我现在想检索所有Entity 2记录。我正在尝试使用NSPredicate,但这似乎是错误的方法。。以下是无法为NSPredicate调用initialize的代码: lazy var entity2Predicate: NSPredicate = { return NSPredicate(format: "%K
lazy var entity2Predicate: NSPredicate = { return NSPredicate(format: "%K = %@", #keyPath(Entity1.relationship), ascending: true)}()
为与Entity1相关的所有Entity2记录定义提取的正确方法是什么?如果您的
Entity2
始终只与一个Entity1
相关,我认为实现这一点的最简单方法是在核心数据模型中定义Entity1
和Entity2
之间的一对多关系
Entity1
。在“关系”下,单击+按钮添加关系。给它起个有意义的名字。由于您没有告诉我们实体的真实名称,因此在本例中,我将调用关系entityTwos
李>
Entity1
不需要任何Entity2
,请将关系设置为可选Entity1
时,也会删除任何相关的Entity2
Entity2
。添加一个关系,给它一个名称(比如entityOne
),并将其设置为与步骤1中创建的关系的名称相反的名称(本例中为entityTwos
)实体1
中:
@NSManaged var entityTwos: NSSet
在实体2中
:
@NSManaged var entityOne: Entity1
完成此操作后,您可以轻松访问与实体1
相关的所有实体2
,无需任何查询,如下所示:
//here, entity1 is an instance of Entity1
entity1.entityTwos
真正酷的是,你也可以走另一条路:
//here, entity2 is an instance of Entity2
entity2.entityOne
谢谢,还有一个问题。首先是的,Entity2将只与一个Entity1匹配,但我可以有一个没有Entity2的Entity1,所以在这种情况下,我将其作为可选项进行检查。如果我抓取Entity1.entityTwos,我假设它返回一个集合,然后我可以将该集合分配给tableview,以便滚动浏览所有值。(我知道这句话有点过于简单,但我在加载一个实体列表时就做到了这一基本概念。)是的,这是正确的。entityTwos是一个NSSet,它具有用于访问对象的allObjects属性。我通常将其强制转换为数组,因为数组更容易使用:entity1.entityTwos.AllObject as![Entity2]将提出另一个问题,因为我现在遇到了另一个崩溃,我认为这是我试图加载NSSet(并处理空集)的方式