快速获取具有一对多关系的核心数据

Posted

技术标签:

【中文标题】快速获取具有一对多关系的核心数据【英文标题】:fetch coredata with one to many relationship in swift 【发布时间】:2018-04-28 20:21:45 【问题描述】:

我有一个显示一行用户的 coredata 实体的 tableview(table1),以及另一个显示与 (table1) 实体以一对多关系连接的实体的 tableview(table2),当 (table2) 出现时点击(table1)选定的行,我的问题是如何在(table1)的选定行中为用户显示(table2)上的数据

示例代码:

 let fetchdata:NSFetchRequest<entity2> = entity2.fetchRequest()
    do 
        userList = try myContext.fetch(fetchdata) [of entity1 object]
    catch
        print(error)
    

我已经将 (table1) 对象作为 nsobject 转移到 (table2) 。 有什么方法可以以正确的方式完成我的功能

【问题讨论】:

基本上您不需要获取与关系相关的数据。只需从关系属性中获取数据。 @vadian 感谢您的回复,是否有任何代码行可以让我按照您的建议进行操作?或任何教程 【参考方案1】:

在 Xcode 的数据模型中,您已经定义了 entity1 和 entity2 之间的一对多关系,该关系的名称也是 entity1 类的一个属性(对于 entity2 上的反向关系也是如此),您可用于访问属于 entity1 实例的所有 entity2。

因此,如果关系被命名为“孩子”,那么它可能看起来像这样

let user = userList[indexPath.row]
let entity2List = user.children //This is a Set

【讨论】:

【参考方案2】:

我通过使用NSPredicate通过使用这行代码将entity2数据与entity1中的那个属性对象连接起来解决了这个问题

let myFetch:NSFetchRequest<entity2> = entity2.fetchRequest()
    let myPredicate = NSPredicate(format: "toEntity1-relationship == %@", (myTransferdObject?.name!)!)
    myFetch.predicate = myPredicate
    do 
        usersList = try myContext.fetch(myFetch)
    catch
        print(error)
    

【讨论】:

以上是关于快速获取具有一对多关系的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

获取核心数据中一对多关系的计数

在具有多对一/一对多关系的核心数据中构造谓词

核心数据 - 以一对多关系访问实例与获取请求?

iphone核心数据:无法删除具有一对多关系的数据

为自己的实体提供一对多的快速核心数据关系

与包含的一对多关系的核心数据谓词