如何在Swift中将基本的初始数据和唯一数据加载到Core Data?

时间:2019-01-31 08:41:29

标签: swift core-data load unique

我正在一个项目上,想将一些初始数据加载到Core Data中。核心数据中有两个属性。首先属于身体部位,其次属于其属性。例如,眼睛具有四种颜色之一,依此类推。数据如下:

眼睛蓝

眼睛棕色

眼睛绿色

眼睛黑

头发红色

头发黑发

金发女郎

服装连衣裙

衣服裙子

衣服鞋

衣服帽子

衣服手套

我已经搜索了一些CSV或pList版本,并听到了一些sqLite装运替代方案,但是无法弄清楚如何有效地完成它们。

对于将较小的初始数据加载到Core Data并从Core Data中删除任何重复值(如果存在)的任何明确解释,我都非常感谢。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

下面是一些非常基本的代码,以显示实现此目的的一种简单方法。

您需要添加自己的标识符属性,以便可以检查项目是否已存在。假设您将其称为var values = new Dictionary<string, string> { { "groupID", ChatDetaiils.groupID }, { "memberID", UserLogin.userID }, { "Message", File }, // etc..etc }; var content = new FormUrlEncodedContent(values); var result = await client.PostAsync("api/FileUpload, content); 。 然后,在启动应用程序时,检查每个默认值,如果尚不存在,请添加它们,如下所示:

id

添加数据后,必须将其保存:

// create a fetch request to get all items with id=1
let fr = NSFetchRequest<MyItem>(entityName: MyItem.entity().name!)
fr.predicate = NSPredicate(format: "id == %@", "1")
do {
    // if that request returns no results
    if (try myManagedObjectContext.fetch(fr).isEmpty == true) {
        // create the default item
        let item = NSEntityDescription.insertNewObject(forEntityName: MyItem.entity().name!, into: myManagedObjectContext) as! MyItem
        // set the id
        item.id = "1"
        // set other attributes here
    }
} catch {
    // fetching failed, handle the error
}

您也可以使用“核心数据唯一约束”,但是我认为这种解决方案要简单得多。希望这会有所帮助!