Core data SwiftUI在视图之间传递核心数据错误
我有一个可以添加的核心数据元素列表。我希望能够编辑它们。为此,我有一个“编辑表”视图。但当我尝试编辑该元素时,应用程序崩溃,并出现错误“Thread 1:”-[Item setTitle:]:无法识别的选择器发送到实例0x60000247A80“” 我在此处重新创建了错误:Core data SwiftUI在视图之间传递核心数据错误,core-data,swiftui,Core Data,Swiftui,我有一个可以添加的核心数据元素列表。我希望能够编辑它们。为此,我有一个“编辑表”视图。但当我尝试编辑该元素时,应用程序崩溃,并出现错误“Thread 1:”-[Item setTitle:]:无法识别的选择器发送到实例0x60000247A80“” 我在此处重新创建了错误: struct ListView: View { @Environment(\.managedObjectContext) var viewContext @FetchRequest(sortDescripto
struct ListView: View {
@Environment(\.managedObjectContext) var viewContext
@FetchRequest(sortDescriptors: []) var items: FetchedResults<Item>
@State var showEditItemSheet = false
@State var itemToEdit = Item()
var body: some View {
List {
ForEach(items) { item in
ListItemView(item: item)
.onTapGesture {
itemToEdit = item
showEditItemSheet.toggle()
}
}
}
.sheet(isPresented: $showEditItemSheet, content: {EditItemView(item: itemToEdit, showEditItemSheet: $showEditItemSheet)}
}
}
struct ListItemView: View {
@FetchRequest(sortDescriptors: []) var items: FetchedResults<Item>
@ObservedObject var item: FetchedResults<Item>.Element
var body: some View {
Text(item.title)
}
}
struct EditItemView: View {
@Environment(\.managedObjectContext) var viewContext
@State var item: FetchedResults<Item>.Element
@Binding var showEditItemSheet: Bool
@State var title = ""
var body: some View {
VStack {
TextField("Title", text: $title)
Button(action: {
item.title = title //<- Here I get the error
saveContext()
showEditItemSheet.toggle()
}, label: {Text("Save")})
}
}
private func saveContext() {
do {
try viewContext.save()
} catch {
let error = error as NSError
fatalError("Unresolved Error: \(error)")
}
}
}
结构列表视图:视图{
@环境(\.managedObjectContext)变量viewContext
@FetchRequest(sortDescriptors:[])变量项:FetchedResults
@状态变量showEditItemSheet=false
@状态变量itemToEdit=Item()
var body:一些观点{
名单{
ForEach(items){item in
ListItemView(项:项)
.ontapsigne{
itemToEdit=项目
showEditItemSheet.toggle()
}
}
}
.sheet(显示:$showEditItemSheet,内容:{EditItemView(项目:itemToEdit,showEditItemSheet:$showEditItemSheet)}
}
}
结构ListItemView:视图{
@FetchRequest(sortDescriptors:[])变量项:FetchedResults
@ObservedObject变量项:FetchedResults.Element
var body:一些观点{
文本(项目名称)
}
}
结构EditItemView:视图{
@环境(\.managedObjectContext)变量viewContext
@状态变量项:FetchedResults.Element
@绑定变量showEditItemSheet:Bool
@State var title=“”
var body:一些观点{
VStack{
文本字段(“标题”,文本:$Title)
按钮(操作:{
item.title=title//尝试在EditItemView中将该项声明为
var item:item
。我这样做了,但没有修复我的错误,但感谢您的帮助!您好!您的“item”是一个类(特别是NSManagedObject子类),但@State仅适用于编辑结构。在EditItemView中,尝试将声明更改为@ObservedObject var item:item
。