Сохранение данных в UserDefaults

swift
ios
coredata
tableview

#1

Всем добрый день) Друзья, у меня есть таблица, данные в которой я сохраняю с помощью core data, ещё в этой таблице есть сортировка, которую я так же реализую с помощью cd, но сам тип сортировки нужно сохранять не в core data, а в user defaults. Я, вроде бы, все сохраняю, но при перезапуске приложения тип сортировки слетает. Если я правильно понимаю, сортировку я сохранять сохраняю, но не читаю ее при запуске приложения. Предполагаю, что ответ лежит на поверхности, но дойти до него не получается. Мой код:

class ViewController: UIViewController {

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

let defaults = UserDefaults.standard

var dataForCells: [Model] = []

let identifier = "Cell"

private lazy var tableView: UITableView = {
    let tableView = UITableView()
    tableView.rowHeight = 104
    return tableView
}()

override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.register(Cell.self, forCellReuseIdentifier: identifier)
    tableView.dataSource = self
    tableView.delegate = self
    
    navigationItem.title = "Треки"
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addButtonPressed))
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Сортировка", menu: sorting())
    navigationController?.navigationBar.prefersLargeTitles = true
    
    setupViews()
    setupConstraints()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    
    fetch()
    tableView.reloadData()
}

private func fetch() {
    
    let request: NSFetchRequest<Model> = Model.fetchRequest()
    
    do
    {
        dataForCells = try context.fetch(request)
    }
    catch {
        print(error)
    }
}

private func setupViews() {
    view.addSubview(tableView)
}

@objc private func addButtonPressed() {
    navigationController?.pushViewController(SecondViewController(), animated: true)
}

private func sorting() -> UIMenu {
    let menu = UIMenu(title: "", children: [
        UIAction(title: "От A-Z") { action in
            
            let request: NSFetchRequest<Model> = Model.fetchRequest()
            let sort = NSSortDescriptor(key: "song", ascending: true)
            request.sortDescriptors = [sort]

            do {
                self.dataForCells = try self.context.fetch(request)
                self.defaults.set(1, forKey: "SortType")
            }
            catch {
                print(error)
            }
            self.tableView.reloadData()
        },
        
        UIAction(title: "От Z-A") { action in
            let request: NSFetchRequest<Model> = Model.fetchRequest()
            let sort = NSSortDescriptor(key: "song", ascending: false)
            request.sortDescriptors = [sort]
            
            do {
                self.dataForCells = try self.context.fetch(request)
                self.defaults.set(2, forKey: "SortType")
            }
            catch {
                print(error)
            }
            self.tableView.reloadData()
        },
        
        UIAction(title: "По исполнителю") { action in
            let request: NSFetchRequest<Model> = Model.fetchRequest()
            let sort = NSSortDescriptor(key: "singer", ascending: true)
            request.sortDescriptors = [sort]
            
            do {
                self.dataForCells = try self.context.fetch(request)
                self.defaults.set(3, forKey: "SortType")
            }
            catch {
                print(error)
            }
            self.tableView.reloadData()
        }
    ])
    return menu
}

private func setupConstraints() {
    tableView.snp.makeConstraints { make in
        make.edges.equalToSuperview()
    }
}

}