首页 > 解决方案 > SwfitUI 2.0 Xcode 12 如何更新核心数据实体的单个属性

问题描述

我正在尝试在我的视图模型中实现一个重置方法,该方法将在按钮操作的视图中调用因此视图将得到更新和持久化

这是我的视图模型中发布的实体的属性

var viewContext: NSManagedObjectContext { PersistenceController.shared.container.viewContext }

@Published var price: Double
@Published var qty: Int
@Published var subtotal: Double

这是我尝试过的 resetAllCounters 方法 我知道这是错误的方法 我只想将 qty 重置为 0 并更新所有计数器

    func resetAllSubtotals(){
    let allCounters: NSFetchRequest<WindowCounter> = WindowCounter.fetchRequest()

    do {
        let savedWindowCounters = try self.viewContext.fetch(allCounters)
        
        for counter in savedWindowCounters {
            counter.qty = 0
        }
        
        try self.viewContext.save()
    } catch {
        print(error.localizedDescription)
    }
}

标签: xcodecore-dataswiftui

解决方案


利用NSBatchUpdateRequest

func resetAllSubtotals(){
    let request = NSBatchUpdateRequest(entityName: "WindowCounter")
    request.propertiesToUpdate = ["qty":0]
    request.resultType = .updatedObjectsCountResultType
    
    do {
        let result = try context.execute(request) as! NSBatchUpdateResult
        //This print the number of rows affected/updated
        print(result.result!)
    }catch {
        //Handel Catch here
    }
}


推荐阅读