我正在尝试将 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)
}
}
点击第 2 项或第 3 项的详细信息仍会显示列表中第 1 项的名称。
如果我删除第一项,它只会显示正确的名称。