在 coreData 中获取一对多关系并放入 tableview

Posted

技术标签:

【中文标题】在 coreData 中获取一对多关系并放入 tableview【英文标题】:Fetch one-to-many relationships in coreData and put it into a tableview 【发布时间】:2019-03-09 19:49:39 【问题描述】:

如何获取核心数据中的一对多关系并将其放入表视图中?

我将此作为用户的数据模型

User CoreData Data Model

这是我的任务数据模型

Task CoreData Data Model

如何获取特定用户的任务并将其放入 tableView

我尝试使用 user.tasks,但是它返回了一个 NSSet,我无法使用它来为表格视图创建数据集。

我应该使用谓词来代替吗?这就是我所拥有的

    func handleCoreDataTask()
    let request: NSFetchRequest<Task> = Task.fetchRequest()
    let dateSorter = NSSortDescriptor(key: "dueDate", ascending: false)
    request.sortDescriptors = [dateSorter]
    //request.predicate = 
    taskResultController = NSFetchedResultsController(fetchRequest: request,
                                                   managedObjectContext: coreDataStack.manageContext,
                                                   sectionNameKeyPath: nil,
                                                   cacheName: nil)
    taskResultController.delegate = self
    do
        try taskResultController.performFetch()
    
    catch
        print("Perform Fetch error: \(error)")
    

【问题讨论】:

这不是代码编写服务,也不是“我该怎么做?”接听服务。如果您有特定于代码的问题,请提出。显示您尝试过的代码,我们会尽力提供帮助。 对不起,我是这个平台和一般编程的新手。我更新了问题并添加了我拥有的代码。 【参考方案1】:

Task 中的User 应用反向关系并添加适当的谓词

let username = "Foo"
let request: NSFetchRequest<Task> = Task.fetchRequest()
request.predicate = NSPredicate(format: "user.name == %@", username)
let dateSorter = NSSortDescriptor(key: "dueDate", ascending: false)
request.sortDescriptors = [dateSorter]

不鼓励使用创建新结果控制器的方式。懒惰地(一次)创建结果控制器并动态更改谓词和排序描述符。

【讨论】:

以上是关于在 coreData 中获取一对多关系并放入 tableview的主要内容,如果未能解决你的问题,请参考以下文章

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

CoreData 在一对多关系中编辑一个属性

获取CoreData一对多关系的索引路径?

以一对多关系从 coredata 中获取所有对象

CoreData 获取所有一对多关系

获取对象时无法访问一对多CoreData关系