#swift #core-data #one-to-many
#swift #core-data #»один ко многим»
Вопрос:
Как я могу извлекать отношения «один ко многим» в core data и помещать их в табличное представление?
У меня это как моя модель данных для пользователя
Пользовательская модель данных 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]
Способ создания нового контроллера результатов не рекомендуется. Создайте контроллер результатов лениво (один раз) и динамически измените дескрипторы предикатов и сортировки.