Я работаю над приложением списка и хотел бы иметь возможность редактировать детали элемента списка. Я использую CoreData для модели данных. Сейчас я застрял в том, как передать элемент данных из DetailView
в EditItemView
. Я обновил код до текущего состояния, в котором я нахожусь. В настоящее время я получаю сообщение об ошибке в DetailView
в строке DetailView(myItem: item)
предварительного просмотра. Правильно ли я установил @State
для name
и правильно передал @Binding
? Я думаю, что моя ошибка заключается в том, что я передаю имя в EditItemView(name: self.$name)
представлению редактирования. Мысли?
Детальный просмотр:
import CoreData
import SwiftUI
struct DetailView: View {
@Environment(\.managedObjectContext) var moc
@ObservedObject var myItem: Item
@State private var name: String
@State private var showingEditScreen = false
var body: some View {
NavigationView {
VStack {
Text(self.myItem.name ?? "Unknown Item")
Text(self.myItem.attribute ?? "Unknown attribute")
}
}
.navigationBarTitle(Text(myItem.name ?? "Unknown Item"), displayMode: .inline)
.navigationBarItems(trailing:
Button(action: {
self.showingEditScreen.toggle()
}) {
Image(systemName: "square.and.pencil")
}
)
.sheet(isPresented: $showingEditScreen) {
EditItemView(name: self.$name).environment(\.managedObjectContext, self.moc)
}
}
}
struct DetailView_Previews: PreviewProvider {
static let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
static var previews: some View {
let item = Item(context: moc)
item.name = "Test item"
item.attribute = "Test attribute"
return NavigationView {
DetailView(myItem: item)
}
}
}
Редактировать просмотр товара:
import CoreData
import SwiftUI
struct EditItemView: View {
@Binding var name: String
var body: some View {
TextField("Enter Item Name", text: self.$name)
}
}
struct EditItemView_Previews: PreviewProvider {
static var previews: some View {
EditItemView(name: .constant("ItemX"))
}
}