如何更新核心数据中的对象?

Posted

技术标签:

【中文标题】如何更新核心数据中的对象?【英文标题】:How to update objects in core data? 【发布时间】:2016-09-27 08:45:35 【问题描述】:

我想更新我的核心数据实体,我的代码是:

let ff: Cart!
let indexPath = self.tableView?.indexPathForSelectedRow
ff = self.cart[indexPath!.row]

let app = UIApplication.sharedApplication().delegate as! AppDelegate
let context = app.managedObjectContext

let entity = NSEntityDescription.entityForName("Cart", inManagedObjectContext: context)
let cartt = Cart(entity: entity!, insertIntoManagedObjectContext: context)
cartt.name = ff.name
cartt.price = Double(ff.price!)
cartt.rest_id = ff.rest_id
cartt.longg = ff.longg
cartt.latt = ff.latt
cartt.item_id = ff.item_id
cartt.restName = ff.restName
cartt.cookTime = ff.cookTime

ff.setValue(Int(txt.text!), forKey: "quantity")

do
    try context.save()
    self.viewDidLoad()
    print(cartt.longg)
    print(cartt.delivery)
    print("saved")

catch
    print("could not save")

核心数据中的元素正在更新,但它也在向我的tableView 添加一个新行,其中包含一个空数据。

【问题讨论】:

保存数据后为什么打电话给self.viewDidLoad() 重新计算购物车 您只想更新quantity 值,对吧? 是的@Chetankasundra 【参考方案1】:

如果您想更新当前对象 ffquantity,请尝试使用这些行。

        let ff: Cart!
        let indexPath = self.tableView?.indexPathForSelectedRow
        ff = self.cart[indexPath!.row]
        let app = UIApplication.sharedApplication().delegate as! AppDelegate
        let context = app.managedObjectContext
        ff.setValue(Int(txt.text!), forKey: "quantity")
        do
            try context.save()
            self.viewDidLoad() // why you call this line here ?
            print(cartt.longg)
            print(cartt.delivery)
            print("saved")
        catch
            print("could not save")
        

你为什么打电话给self.viewDidLoad()

在您的下一个代码中,您正在创建一个新项目,而不仅仅是更新当前项目。

【讨论】:

用零钱乘以价格再次计算购物车 好的,它现在可以工作了,但是当它改变时我需要更新视图 好的,完美! ;) 但是不建议直接调用viewDidLoad: 可能你应该重构一下

以上是关于如何更新核心数据中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 在对象中的多对关系更改属性后更新 UI

如何从数据数组中删除对象(核心数据)

更新表格视图单元格中的核心数据值后如何刷新

核心数据 - 实例变量更新中的 NSManagedObjects

我应该如何对我的核心数据实体中的 NSNumber 属性执行计算/更新?

快速更新核心数据上的对象 4