Задать вопрос

Как выгрузить в TableView Cells значения из разных сущностей CoreData?

Как выгрузить в TableView Cells значения из разных сущностей CoreData?
А потом осуществить переход с каждый cell на определенный ViewController,
в зависимости от того, какую из сущностей эта cell отображает.

Как можно переделать мой код отображения и переходов для одной сущности , на отображение нескольких сущностей и переход в другое окно в зависимости от вида сущности?

import UIKit
import CoreData

class CustomersTableViewController: UITableViewController, NSFetchedResultsControllerDelegate {
    
    typealias Select = (Customer?) -> ()
    var didSelect: Select?
    
    var fetchedResultsController = CoreDataManager.instance.fetchedResultsController("Customer", keyForSort: "name")
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        fetchedResultsController.delegate = self
        do {
            try fetchedResultsController.performFetch()
        } catch {
            print(error)
        }
    }
    
    @IBAction func AddCustomer(_ sender: AnyObject) {
        performSegue(withIdentifier: "customersToCustomer", sender: nil)
    }
    
    // MARK: - Table View Data Source
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let sections = fetchedResultsController.sections {
            return sections[section].numberOfObjects
        } else {
            return 0
        }
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let customer = fetchedResultsController.object(at: indexPath) as! Customer
        let cell = UITableViewCell()
        cell.textLabel?.text = customer.name
        return cell
    }
    
    
    
    
    // MARK: - Table View Delegate
    
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            let managedObject = fetchedResultsController.object(at: indexPath) as! NSManagedObject
            CoreDataManager.instance.managedObjectContext.delete(managedObject)
            CoreDataManager.instance.saveContext()
        }
    }
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let customer = fetchedResultsController.object(at: indexPath) as? Customer
        if let dSelect = self.didSelect {
            dSelect(customer)
            dismiss(animated: true, completion: nil)
        } else {
            performSegue(withIdentifier: "customersToCustomer", sender: customer)
        }
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "customersToCustomer" {
            let controller = segue.destination as! CustomerViewController
            controller.customer = sender as? Customer
        }
    }
  • Вопрос задан
  • 348 просмотров
Подписаться 3 Средний 10 комментариев
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21 Куратор тега Swift
В общем и целом Вы немного сами не понимаете чего хотите. Если у вас разные сущности CoreData, то должны быть и разные UITableViewCell для отображения данных разных сущностей. Тогда в методе
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
не возникнет труда понять, с какой сущностью Вы работаете сейчас, ведь у каждого типа UITableViewCell есть свой уникальный идентификатор. Ну а по нему Вы и сможете понять куда делать переход.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы