Извлекать отношения «один ко многим» в CoreData и помещать их в tableview

#swift #core-data #one-to-many

#swift #core-data #»один ко многим»

Вопрос:

Как я могу извлекать отношения «один ко многим» в core data и помещать их в табличное представление?

У меня это как моя модель данных для пользователя

Пользовательская модель данных CoreData

И это моя модель данных для задачи

Модель данных Task CoreData

Как я могу извлекать задачи для конкретного пользователя и помещать их в TableView

Я попытался использовать user.tasks, однако это вернуло NSSet, и я не смог использовать это для создания набора данных для табличного представления.

Должен ли я вместо этого использовать predicate для этого? Это то, что у меня есть

     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. Это не служба написания кода и не служба ответов на вопрос «Как мне что-то сделать?». Если у вас есть вопрос по конкретному коду, пожалуйста, задайте его. Покажите код, который вы пробовали, и мы постараемся помочь.

2. Извините, я новичок в этой платформе и программировании в целом. Я обновил вопрос и добавил имеющийся у меня код.

Ответ №1:

Примените обратное отношение к User in Task и добавьте соответствующий предикат

 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]
  

Способ создания нового контроллера результатов не рекомендуется. Создайте контроллер результатов лениво (один раз) и динамически измените дескрипторы предикатов и сортировки.