bugfix> swift > 投稿

CoreData構造: エンティティ:ZooAnimals、属性:animal(文字列型)およびcount(整数16型)

いくつかの動物の名前と各動物の数(数)を保存したいと思います。これを行うために必要な複数のオブジェクトをハードコーディングすることでこれを行うことができます-以下のコードを参照してください-しかし、どのように柔軟にそれを行うと、任意の長さの配列をいくつか与えて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 件
  • 簡単な解決策は 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  無意味です。アプリケーションデリゲートクラスが欠落している場合でも、アプリは起動しません。

  • 単純に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")
            }
        }
    
    

あなたの答え