Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 根据Swift核心数据中的关系获取与特定实体相关的所有条目_Ios_Swift_Core Data - Fatal编程技术网

Ios 根据Swift核心数据中的关系获取与特定实体相关的所有条目

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

我有一个简单的两实体核心数据数据库 实体1 -属性1 -属性2 实体2 -属性1

关系的定义使得对于每个实体1,我可以有许多实体2

我已通过UITableView选择了单个实体1 我现在想检索所有Entity 2记录。我正在尝试使用NSPredicate,但这似乎是错误的方法。。以下是无法为NSPredicate调用initialize的代码:

   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
  • 取消选中可选选项,并将类型设置为“一”。将删除规则设置为“null”
  • 您还需要为实体类中的关系添加属性。在
    实体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(并处理空集)的方式