如何在详细视图中正确更新CoreData对象?

我想要一个简单的应用程序,其中包含项目的排序列表。单击每个项目都会进入详细信息视图,在该视图中单击另一个按钮将更新项目的字段,该字段应重新绘制原始列表。

列表视图由以下方式提供:

import SwiftUI
import CoreData

struct ContentView: View {

    @Environment(\.managedobjectcontext) var context 

    @State private var itemName: String = ""

    // get all data,sorted by date
    @FetchRequest(
        entity: Item.entity(),sortDescriptors: [NSSortDescriptor(keyPath: \Item.lastEdited,ascending: true)]
    ) var allItems: FetchedResults<Item>



    var body: some View {

        NavigationView {
            List {
                ForEach (allItems) { item in
                    NavigationLink(destination: DetailView(item: item).environment(\.managedobjectcontext,self.context)) {
                        Text(item.name ?? "No name given")
                    } // nav link

                }


            }
    }
}


并通过以下方式提供详细视图:


import SwiftUI
import CoreData


struct DetailView: View {


    @Environment(\.managedobjectcontext) var context

    var item: FetchedResults<Item>.Element

    var body: some View {

        Button (action: {
            self.updateDate(item: self.item)

            }) {
                Text("Press me!")
            }

    } // body

    func updateDate(item: Item) {
        item.lastEdited = Date()
    } // func

} // DetailView



在详细信息视图上按“按我”按钮将导致更新工作,并且列表视图也将更新,但这会在我按按钮时发生:

  1. 显示带有详细信息视图的新屏幕
  2. 返回列表视图

为什么(1)发生?如何避免这种情况?

我在xcdatamodeld中将Item定义为实体

lanfare321 回答:如何在详细视图中正确更新CoreData对象?

改变

var item: FetchedResults<Item>.Element

@ObservedObject var item: Item

这可能是因为父级正在重绘。

,

在 DetailView 中进行更改,请尝试此操作。它将保存您所做的更改。

do {
    try self.context.save()
} catch {
    print(error)
}
本文链接:https://www.f2er.com/2461638.html

大家都在问