【问题标题】:Swift 2.1 Core Data - Pre-populating data with setValue() only persists the last oneSwift 2.1 Core Data - 使用 setValue() 预填充数据只保留最后一个
【发布时间】:2016-03-30 03:09:25
【问题描述】:

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

我曾考虑将我的应用程序与 sqlite 或 csv 文件捆绑在一起以预加载数据,但由于它只有 4 条记录,我决定在运行时注入默认值,条件是只执行一次。

我面临的问题是,使用以下代码块,我只能保留最后一条记录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")
    }

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    您不是每次设置一个新的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)
            }
    

    【讨论】:

    • 有没有办法确保它们按照指定的顺序插入?我测试了几次,发现它们是按随机顺序持久化的。
    • CoreData 不区分按顺序存储值。所有获取都将返回随机排序 - 您必须以某种方式排序才能获取有序数据。
    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 2013-06-08
    • 2011-04-15
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多