我正在尝试将 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”时没有完全匹配
答案 0 :(得分:1)
首先,使用字符串插值从字符串创建字符串是多余的。
其次,您的代码已经包含了答案(紧跟在 ForEach
之后)。由于 name
是可选的,因此您必须解开它。
Text(entity.name ?? "No Name")
答案 1 :(得分:0)
在 DetailItemView 中执行您在 ContentView 中所做的操作:
Text(entity.name ?? "No Name")