Hallo,
ich tüftele gerade etwas mit CoreData rum und habe mir eine kleine App gebaut. In der App kann ich Bediener anlegen und speichern und die werden auch brav in einer Liste angezeigt, aber wenn ich den selben Bediener editiere scheint CoreData das nicht "auf die Platte" zu speichern. Also ändere ich etwas an einem Bediener und verlasse die Ändern View, dann wir die View die auf dem NaVStack zurück liegt nicht aktualisiert, gehe ich wieder in das ändern rein, sehe ich das was ich geändert habe. Beende ich dann die App und starte Sie erneut sind zwar die Bediener da, aber die Änderungen sind weg.......
Ich suche nun schon seid 2 Tagen nach dem Problem. Hat hier vielleicht eine Idee
Das ist die Liste:
Alles anzeigen
Das ist der teil in dem ich dann editiere und es wird nicht gespeichert
Alles anzeigen
Schon mal danke im voraus.
Dirk
ich tüftele gerade etwas mit CoreData rum und habe mir eine kleine App gebaut. In der App kann ich Bediener anlegen und speichern und die werden auch brav in einer Liste angezeigt, aber wenn ich den selben Bediener editiere scheint CoreData das nicht "auf die Platte" zu speichern. Also ändere ich etwas an einem Bediener und verlasse die Ändern View, dann wir die View die auf dem NaVStack zurück liegt nicht aktualisiert, gehe ich wieder in das ändern rein, sehe ich das was ich geändert habe. Beende ich dann die App und starte Sie erneut sind zwar die Bediener da, aber die Änderungen sind weg.......
Ich suche nun schon seid 2 Tagen nach dem Problem. Hat hier vielleicht eine Idee
Das ist die Liste:
Quellcode
- import SwiftUI
- struct BedienerList: View {
- @StateObject var bedienerVM = BedienerViewModel()
- @State var vorname:String = ""
- @State var nachname:String = ""
- @State var token:String = "0"
- @State var showSheet = false
- var body: some View {
- NavigationStack {
- List {
- ForEach(bedienerVM.bediener) { bed in
- NavigationLink("\(bed.nr) - \(bed.nachname ?? "Error"), \(bed.vorname ?? "Error")") {
- BedienerDetail(bediener:bed)
- }
- .foregroundColor(bed.active ? Color.primary:Color.secondary)
- }
- .onDelete(perform: bedienerVM.deleteBediener)
- }
- .navigationTitle("Bediener")
- .toolbar {
- NavigationLink {
- BedienerNeu()
- } label: {
- VStack {
- Image(systemName: "person.fill.badge.plus")
- .foregroundColor(Color.primary)
- Text("Bediener hinzufügen")
- .font(.subheadline)
- .foregroundColor(Color.secondary)
- }
- }
- }
- }
- .onAppear() {
- bedienerVM.fetchBediener()
- }
- }
- }
Das ist der teil in dem ich dann editiere und es wird nicht gespeichert
Quellcode
- import SwiftUI
- struct BedienerDetail: View {
- @Environment(\.managedObjectContext) var moc
- @ObservedObject var bediener: Bediener
- @State private var vorname:String = ""
- @State private var nachname:String = ""
- @State private var token:String = ""
- @State private var nr:Int32 = 0
- @State private var active = true
- var body: some View {
- VStack {
- HStack {
- List {
- Section(header: Text("Bediener ID")) {
- TextField("Bediener ID", value: $nr, format: .number)
- .disabled(true)
- .textFieldStyle(.roundedBorder)
- .textInputAutocapitalization(.never)
- .multilineTextAlignment(.center)
- .font(.largeTitle)
- Toggle("Bediener aktiv", isOn: $active)
- .onChange(of: active) { newValue in
- bediener.active = active
- do {
- try moc.save()
- print("gespeicherte Objekte: \(moc.insertedObjects.count)")
- } catch {
- print("catch: \(error)")
- }
- }
- }
- Section(header: Text("Persönliche Angaben")) {
- TextField("Vorname", text: $vorname)
- .textFieldStyle(.roundedBorder)
- .textInputAutocapitalization(.never)
- .font(.largeTitle)
- .onChange(of: vorname, perform: { newValue in
- bediener.vorname = vorname
- })
- TextField("Nachname", text: $nachname)
- .textFieldStyle(.roundedBorder)
- .textInputAutocapitalization(.never)
- .font(.largeTitle)
- .onChange(of: nachname, perform: { newValue in
- bediener.nachname = nachname
- })
- }
- Section(header: Text("Technische Daten")) {
- TextField("Token", text: $token)
- .textFieldStyle(.roundedBorder)
- .textInputAutocapitalization(.never)
- .font(.largeTitle)
- .onChange(of: token, perform: { newValue in
- bediener.token = token
- })
- }
- }
- }
- }
- .onAppear(perform: {
- vorname = bediener.vorname ?? "Error"
- nachname = bediener.nachname ?? "Error"
- token = bediener.token ?? "Error"
- nr = bediener.nr
- active = bediener.active
- })
- .onDisappear(perform: {
- do {
- try moc.save()
- print("gespeicherte Objekte: \(moc.insertedObjects.count)")
- } catch {
- print("catch: \(error)")
- }
- })
- }
- }
print("gespeicherte Objekte: \(moc.insertedObjects.count)")
zeigt "0" an.Schon mal danke im voraus.
Dirk