Сохранение нескольких объектов для атрибута в CoreData - PullRequest
0 голосов
/ 25 мая 2018

Структура CoreData: Объект: ZooAnimals, Атрибуты: animal (тип String) и count (тип Integer 16)

Я хочу сохранить в некоторых названиях животных и количество (count)каждого животного.Я могу сделать это путем жесткого кодирования нескольких объектов, необходимых для этого - см. Код ниже, - но как я могу сделать это более гибко, чтобы я мог просто дать ему пару массивов любой длины и сохранить их в CoreData (например, var animalArray = ["Donkey","Horse","Zebra","Okapi"], var animalCountArray = [7,3,9,2])

import UIKit
import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
        let managedContext = appDelegate.persistentContainer.viewContext

        let animal1 = NSEntityDescription.insertNewObject(forEntityName: "ZooAnimals", into: managedContext)
        let animal2 = NSEntityDescription.insertNewObject(forEntityName: "ZooAnimals", into: managedContext)
        let animal3 = NSEntityDescription.insertNewObject(forEntityName: "ZooAnimals", into: managedContext)
        let animal4 = NSEntityDescription.insertNewObject(forEntityName: "ZooAnimals", into: managedContext)

        animal1.setValue("Donkey", forKey: "animal")
        animal1.setValue(7, forKey: "count")
        animal2.setValue("Horse", forKey: "animal")
        animal2.setValue(3, forKey: "count")
        animal3.setValue("Zebra", forKey: "animal")
        animal3.setValue(9, forKey: "count")
        animal4.setValue("Okapi", forKey: "animal")
        animal4.setValue(2, forKey: "count")

        do {
            try managedContext.save()
        } catch let error as NSError {
            print("Could not save. \(error), \(error.userInfo)")
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Просто вам нужно использовать цикл for

let employeeNames = ["Donkey", "Horse", "Zebra","Okapi"]
    for i in 0..<employeeNames.count
    {
        let employeeEntry = NSEntityDescription.insertNewObjectForEntityForName("ZooAnimals", inManagedObjectContext: managedObject)

        employeeEntry.setValue(employeeNames[i], forKey: "employeename")
        employees.setValue(index, forKey: "animal")

        do {
            try managedObject.save()
        } catch {
            print("problem saving")
        }
    }
0 голосов
/ 25 мая 2018

Простым решением является петля for

let animalArray = ["Donkey","Horse","Zebra","Okapi"]
let animalCountArray = [7,3,9,2]
assert(animalArray.count == animalCountArray.count, "The number of items in the arrays must be equal")

for i in 0..<animalArray.count {
    let animal = NSEntityDescription.insertNewObject(forEntityName: "ZooAnimals", into: managedContext)
    animal.setValue(animalArray[i], forKey: "animal")
    animal.setValue(animalCountArray[i], forKey: "count")
}
do {
    try managedContext.save()
} catch  {
    print("Could not save. \(error)")
}

Примечание: guard ing AppDelegate бессмысленно.Приложение даже не запустится, если отсутствует класс делегата приложения.

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