Если Journey
является вашим подклассом NSManagedObject
, вы должны использовать NSFetchedResultsController
для извлечения сохраняемых объектов.
Ваш SavedJourneysViewController
должен иметь ссылку на экземпляр NSManagedObjectContext
, который вы будете использовать для извлечения ваших Journey
объектов. Предположим, что у вас есть viewContext
свойство типа NSManagedObjectContext
в вашем SavedJourneysViewController
, которое устанавливается извне, где бы вы ни инициализировали SavedJourneysViewController
.
Вы захотите объявить fetchedResultsController
в SavedJourneysViewController
.
private lazy var fetchedResultsController: NSFetchedResultsController<Journey> = {
let fetchRequest: NSFetchRequest< Journey > = Journey.fetchRequest()
let sortDescriptor = NSSortDescriptor(keyPath: \Journey.date, ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: viewContext, sectionNameKeyPath: nil, cacheName: nil)
return fetchedResultsController
}()
Затем выполните выборку в viewDidLoad
(например), вызвав try? fetchedResultsController.performFetch()
:
Затем в numberOfRowsInSection
вернуть fetchedResultsController.sections?[section].objects?.count ?? 0
:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fetchedResultsController.sections?[section].objects?.count ?? 0
}
Не забудьте о реализации func numberOfSections(in tableView: UITableView) -> Int
и возврате fetchedResultsController.sections?.count ?? 0
:
func numberOfSections(in tableView: UITableView) -> Int {
return fetchedResultsController.sections?.count ?? 0
}
В cellForRowAt
настройте ячейку с Journey
объектом:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = let cell = tableView.dequeueReusableCell(withIdentifier: "JourneyItem", for: indexPath)
guard let journey = fetchedResultsController.sections?[indexPath.section].objects?[indexPath.row] as? Journey else {
return cell
}
// handle cell configuration
cell.textLabel?.text = String(journey.distance)
return cell
}
Подробнее об использовании NSFetchedResultsController
с UITableViewController
-