在 CoreData 中更新和编辑实体

Posted

技术标签:

【中文标题】在 CoreData 中更新和编辑实体【英文标题】:Updating and Editing an Entity in CoreData 【发布时间】:2017-01-24 06:52:36 【问题描述】:

我正在开发一个应用程序,用户可以在其中创建一个包含许多项目的列表。我的 CoreData 模型如下。

下面的代码获取list.contains 关系并将其存储为itemsOnList Set,然后使用 Set 中的每个 Item 填充 UITableView

func getItemsOnList()

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext

    //fetchRequest to get the List
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "List")
    let predicate = NSPredicate(format: "title == %@", listName)
    fetchRequest.returnsObjectsAsFaults = false
    fetchRequest.predicate = predicate

    if let fetchResults = try? context.fetch(fetchRequest)
        if fetchResults.count > 0 
            for listEntity in fetchResults 
                let list = listEntity as! List
                print(list.title as Any)
                itemsOnListSet = list.contains!
            
        
    

我希望用户能够更改商品的名称或数量。

我这样做的第一种方法是因为我已经有了项目的 NSSet,我只需更改我想要的项目,然后将旧的 list.contains 与新的一起保存。

这是一种明智的做法,还是有更简单的方法?

谢谢

【问题讨论】:

【参考方案1】:

contains 重命名为items,以便描述它是什么。 (编辑:也将belongsTo重命名为list

所以要访问链接到列表的项目,只需list.items,更清晰。

现在,如果您想编辑一个项目,只需将其从该集合中取出并编辑即可,关系不会改变。如果您想添加或删除项目,只需再次触摸list.items

【讨论】:

以上是关于在 CoreData 中更新和编辑实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 4 CoreData 中设置合并策略

CoreData(IOS)多列的唯一约束?

一旦实体更新,Coredata 关系就会中断

如何像实体框架一样在Core Data的一个类文件中对属于一个实体的方法进行分组?

CoreData 在一对多关系中编辑一个属性

核心数据 - 编辑、递增和保存属性到现有实体