Сохранение в несколько объектов - Основные данные - Swift - PullRequest
0 голосов
/ 03 сентября 2018

Надеюсь, это будет иметь смысл.

Я пытаюсь сохранить данные в двух разных объектах из одной функции, но мне не очень удаётся хранить данные во втором объекте.

Мои 2 сущности называются - Job & ShootKitChecklist .

Я создал менеджер основных данных, я удалил его, чтобы показать вам раздел, который я использую:

struct CoreDataManager {

static let shared = CoreDataManager()

let persistentContainer: NSPersistentContainer = {
    // initialization of core data stack
    let container = NSPersistentContainer(name: "TBAShootCoreData")
    container.loadPersistentStores { (storeDescription, error) in
        if let error = error {
            fatalError("loading of store failed: \(error)")
        }
    }
    return container
}()

func createSKCItem(item: String, used: Bool, visible: Bool, job: Job) -> (ShootKitChecklist?, Error?) {
    let context = persistentContainer.viewContext
    // create Shoot kit item
    let SKC = NSEntityDescription.insertNewObject(forEntityName: "ShootKitChecklist", into: context) as! ShootKitChecklist

    SKC.job = job

    SKC.setValue(item, forKey: "item")
    SKC.setValue(used, forKey: "used")
    SKC.setValue(visible, forKey: "visible")

    do {
        try context.save()
        return (SKC, nil)
    } catch let error {
        print ("Failed to add Shoot Kit Item:", error)
        return (nil, error)
    }
}

}

Когда я пытаюсь сохранить данные, сущность Job ( First Entity ) записывает данные в контекст, и я могу получить их в другом классе.

Данные, которые я пытаюсь сохранить в ShootKitChecklist, взяты из массива, поэтому я поместил мои setValues ​​для просмотра. Однако, похоже, что он игнорирует сохранение каких-либо данных в объекте.

var SKCequipment = ["A","B","C","D","E"]

@IBAction private func HandleSave(sender : UIButton) {



        let context = CoreDataManager.shared.persistentContainer.viewContext

        let job = NSEntityDescription.insertNewObject(forEntityName: "Job", into: context)
        let SKC = NSEntityDescription.insertNewObject(forEntityName: "ShootKitChecklist", into: context)

        job.setValue(jobBrandTextField.text, forKey: "jobBrand")
        job.setValue(jobNameTextField.text, forKey: "jobName")
        job.setValue(directorTextField.text, forKey: "directorName")
        job.setValue(agencyTextField.text, forKey: "agencyName")
        job.setValue(prodCoTextField.text, forKey: "prodCoName")


        for item in SKCequipment {
            print(item)
            SKC.setValue(item, forKey: "item")
            SKC.setValue(true, forKey: "used")
            SKC.setValue(true, forKey: "visible")
        }

        do {
            try context.save()
            dismiss(animated: true) {
                self.delegate?.didAddJob(job: job as! Job)
            }
        } catch let saveError {
            print("Failed to save company:", saveError)
        }
    }

Чтобы проверить, были ли элементы добавлены в основные данные, я получаю такие элементы:

guard let SKCitem = job?.skc?.allObjects as? [ShootKitChecklist] else { return}
self.skcitems = SKCitem
print(skcitems)

Заранее спасибо, огромная помощь!

1 Ответ

0 голосов
/ 04 сентября 2018

Хорошо, я исправил это, добавив еще одну функцию в свой протокол и добавив сущность в делегат (я понимаю, что раньше я этим не делился (извинения). Вот мой новый протокол:

protocol NewJobControllerDelegate {
    func didAddJob(job : Job)
    func didAddSKC(SKC : ShootKitChecklist)
}

А затем в своем действии HandleSave я изменил цикл for на следующий:

for item in SKCequipment {
            let tuple = CoreDataManager.shared.createSKCItem(item: item, used: true, visible: true, job: job as! Job)
            if let error = tuple.1 {
                print("Cannot save items", error)
            } else  {
                self.delegate?.didAddSKC(SKC: tuple.0!)
            }

И, наконец, моя новая функция от моего делегата:

func didAddSKC(SKC: ShootKitChecklist) {
        ShootKit.append(SKC)
    }

Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...