Swift 2.1核心数据 - 使用setValue()预填充数据仅保留最后一个

时间:2016-03-30 03:09:26

标签: ios swift core-data

我正在开发一个具有类别实体的应用,该实体需要在启动时预先填充4个默认记录。

我已经看过用sqlite或csv文件捆绑我的应用程序来预加载数据,但由于它只有4条记录,所以我决定在运行时注入默认值,条件只执行一次。 / p>

我面临的问题是,使用以下代码块,我只能保留最后一条记录Drink。我猜他们在移动到下一个setValue()时会覆盖自己。如何确保在同一属性上保留所有记录?

    do {
        let result = try context.executeFetchRequest(request)
        print(result.count)
        if result.count == 0 {

            //Pre-populate recipe categories
            let entityCategory = NSEntityDescription.entityForName("RecipeCategory", inManagedObjectContext: self.managedObjectContext)
            let newCategory = NSManagedObject(entity: entityCategory!, insertIntoManagedObjectContext: self.managedObjectContext)

            newCategory.setValue("Main", forKey: "name")
            newCategory.setValue("Side", forKey: "name")
            newCategory.setValue("Dessert", forKey: "name")
            newCategory.setValue("Drink", forKey: "name")

            do {
                try newCategory.managedObjectContext?.save()
            } catch {
                let saveError = error as NSError
                print(saveError)
            }

        }
    } catch {
        print("Error fetching data")
    }

1 个答案:

答案 0 :(得分:3)

每次设置时都不会创建新的newCategory。试着这样做:

let categories = ["Main", "Side", "Dessert", "Drink"]
for category in categories {
    let newCategory = NSManagedObject(entity: entityCategory!, insertIntoManagedObjectContext: self.managedObjectContext)
    newCategory.setValue(category, forKey: "name")
}

do {
            try self.managedObjectContext.save()
        } catch {
            let saveError = error as NSError
            print(saveError)
        }