SwiftUI 中 CoreData 列表项的详细视图

时间:2021-07-15 12:43:57

标签: 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)
                                       }    
                            }
                        }

Detail View,这是我想要显示项目详细信息的地方。现在我只想在这个视图中显示“名称”。

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

...但是我在 DetailItemView 中的 Text("\(entity.name)") 旁边收到此错误:

<块引用>

在调用实例方法“appendInterpolation”时没有完全匹配

2 个答案:

答案 0 :(得分:1)

首先,使用字符串插值从字符串创建字符串是多余的。

其次,您的代码已经包含了答案(紧跟在 ForEach 之后)。由于 name 是可选的,因此您必须解开它。

Text(entity.name ?? "No Name")

答案 1 :(得分:0)

在 DetailItemView 中执行您在 ContentView 中所做的操作:

Text(entity.name ?? "No Name")
相关问题