SwiftUI:列表中的第一项始终显示在详细信息视图中

时间:2021-07-16 08:16:54

标签: swift swiftui

我正在尝试将 CoreData 列表项的详细信息传递到单独的详细信息视图...

我的物品模型

class CoreDataViewModel: ObservableObject {
    let container: NSPersistentContainer
    @Published var savedEntites: [MemoryEntity] = []
    init() {
        container = NSPersistentContainer(name: "MemoryContainer")
        container.loadPersistentStores { (description, error) in
            if let error = error {
              print("Error loading CoreData. \(error)")
        }
        }
        FetchMemories()
    }
    
    func FetchMemories() {
        let request = NSFetchRequest<MemoryEntity>(entityName: "MemoryEntity")
        do {
        savedEntites = try container.viewContext.fetch(request)
        } catch let error {
            print("Error fetching \(error)")
        }
    }   
   
    }

我的内容查看

                   @StateObject var vm = CoreDataViewModel()

                   List {
                        ForEach(vm.savedEntites) { entity in
                            Text(entity.name ?? "No Name")
                                .font(.system(size: 25))
                                
                            HStack {
                                Button(action: {showingDetailScreen.toggle()}) {
                                Label("View Details", systemImage: "pencil")
                                         }.foregroundColor(Color(.red))
                                .sheet(isPresented: $showingDetailScreen) {
                                    DetailItemView(isVisible: self.$showingDetailScreen, entity: entity)
                                       }    
                            }
                        }

详细视图

struct DetailItemView: View  {
        @Environment(\.presentationMode) var presentationMode
        @Binding var isVisible: Bool
        var entity: MemoryEntity
 
        var body: some View {
            Text(entity.name ?? "No Name")
            HStack {
            Button("Exit") {
                self.isVisible = false
                   }
            }
            .frame(width: 300, height: 150)
            }
    }

enter image description here

点击第 2 项或第 3 项的详细信息仍会显示列表中第 1 项的名称。

enter image description here

如果我删除第一项,它只会显示正确的名称。

enter image description here

0 个答案:

没有答案