Вопрос по работе с coreData


#1

сейчас изучаю CoreData и суть упражнения такая мне нужно добавь в имеющийся проект. В appDeligate и ScenceDelegat нужную часть кода я добавил, сущность создал вот теперь не могу понять как мне внедрить ее в проект что бы не было ошибок. В уроки по фреймворку там у перепода есть массив он убирает [String] и вводит [Entity] и все ок работает, но у меня же в приложении есть struct в котором все описано struct

Emoji {
    var emoji: String
    var name: String
    var description: String
    var isFavorite: Bool
}

то есть модель вот тут напрашивается вопрос нужна ли она теперь или ее надо удалять. Вот пару строк кода

class NewEmojiTableViewController: UITableViewController {
    
    var emoji = Emoji(emoji: "", name: "", description: "", isFavorite: false)
    
    
    @IBOutlet weak var emojiTF: UITextField!
    @IBOutlet weak var descriptionTF: UITextField!
    @IBOutlet weak var nameTF: UITextField!
    @IBOutlet weak var saveButton: UIBarButtonItem!
    

    override func viewDidLoad() {
        super.viewDidLoad()
        updateUI()
        updateSaveButtonState()

    }
    
    private func updateSaveButtonState(){
        let emojiText = emojiTF.text ?? ""
        let nameText = nameTF.text ?? ""
        let descriptionText = descriptionTF.text ?? ""
        
        saveButton.isEnabled = !emojiText.isEmpty && !nameText.isEmpty && !descriptionText.isEmpty
        
    }
    
    private func updateUI(){
        emojiTF.text = emoji.emoji
        nameTF.text = emoji.name
        descriptionTF.text = emoji.description
    }

    @IBAction func textChange(_ sender: UITextField) {
        updateSaveButtonState()
    }
    
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        super.prepare(for: segue, sender: sender)
        guard segue.identifier == "saveSegue" else { return }
        let emoji = emojiTF.text ?? ""
        let name = nameTF.text ?? ""
        let description = descriptionTF.text ?? ""
        
        self.emoji = Emoji(emoji: emoji, name: name, description: description, isFavorite: self.emoji.isFavorite)
    }

}

как я понимаю правка нужно отсюда и так же надо было создать функцию для записи в саму бд но это потом. Это сама сущность


#2
  1. Вам нужно убрать вашу структуру Emoji.
  2. Создать новый объект кордаты:

строку

 var emoji = Emoji(emoji: "", name: "", description: "", isFavorite: false)` 

заменить на

 var emoji = EmojiEntity(context: ВАШКОНТЕКСТ)

в функции

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

строку

        self.emoji = Emoji(emoji: emoji, name: name, description: description, isFavorite: self.emoji.isFavorite)

исправить на

        self.emoji.emoji = emoji
        self.emoji.name = name
        self.emoji.description = description
    }

ну и потом не забыть сохранить контекст


#3

спасибо большое ушел пробовать


#4

еще такой вопрос в senceDelegate.swift написла сл строку
let vc = window?.rootViewController as ! ViewController
let context = (UIApplication.shared.delegate as ! AppDelegate).persistentContainer.viewContext
но когда пытаю предать контекс вот таки образом
vc.context = context он мне не дает сделать пишет Value of type ‘ViewController’ has no member ‘context’ в урроке что бы подвязать coreData весь код приложения писали во viewController а у меня CustomView может это вляет.


#5

Правильно он вам пишет: у вас нет такой переменной в контроллере, куда передаёте.

То есть из кода не понятно или вы кастите (as! ViewController) не до того типа контроллера, который у вас (как называется контроллер ваш). Либо нет такой переменой в вашем контроллере. Ее нужно в вашем контроллере сначала объявить:

var context: NSManagedObjectContext?