Надеюсь, это будет иметь смысл.
Я пытаюсь сохранить данные в двух разных объектах из одной функции, но мне не очень удаётся хранить данные во втором объекте.
Мои 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)
Заранее спасибо, огромная помощь!