Hallo zusammen,
Zeit für meinen ersten Eintrag hier im Forum.
Ich muss zugeben ich bin neu in der iOS Entwicklung und stehe aktuell vor einem Problem.
Ich habe per SwiftData ein Model erstellt. Erst mal zum Test nichts dolles:
Alles anzeigen
Dann habe ich eine NavigationSplitView erzeugt in der in der 1. Spalte eine List mit Einträgen aus der Modelklasse erstellt wird. Soweit so gut. Damit die Detail Ansicht (2. Spalte) korrekt angezeigt wird, muss man die Liste per "Selection" Anweisung erstellen.
Sobald man einen Eintrag ausgewählt hat befindet sich in der Selektion Variable ein Optional von dem ausgewählten Objekt. Und hier ist das Problem. Ich möchte in der Detail Ansicht Textfelder verwenden und hier ein Optional als Binding Parameter anzugeben geht nicht. Auch mit forced Unwrapped nicht.
Ich habe das jetzt erstmal so gelöst, dass ich den der DetailView eine @State Variable vom Optional erstelle. Das ganz funktioniert und die Views werden aktualisiert sowie SwiftData speichert die Daten auch, aber es fühlt sich irgendwie nicht richtig an. Und bei er Ausführung meckert Xcode auch per Warnung:
Accessing State's value outside of being installed on a View. This will result in a constant Binding of the initial value and will not update.
Ich denke man kann das irgendwie eleganter machen.
Hier mein auf das Wesentliche gekürzter Code:
Alles anzeigen
Das Problem ist halt, dass folgendes nicht geht, weil aktImmo ein Optional ist.
Für Hinweise ich die richtige Richtung wäre ich sehr dankbar.
Viele Grüße Micky
Zeit für meinen ersten Eintrag hier im Forum.
Ich muss zugeben ich bin neu in der iOS Entwicklung und stehe aktuell vor einem Problem.
Ich habe per SwiftData ein Model erstellt. Erst mal zum Test nichts dolles:
Quellcode
Dann habe ich eine NavigationSplitView erzeugt in der in der 1. Spalte eine List mit Einträgen aus der Modelklasse erstellt wird. Soweit so gut. Damit die Detail Ansicht (2. Spalte) korrekt angezeigt wird, muss man die Liste per "Selection" Anweisung erstellen.
Sobald man einen Eintrag ausgewählt hat befindet sich in der Selektion Variable ein Optional von dem ausgewählten Objekt. Und hier ist das Problem. Ich möchte in der Detail Ansicht Textfelder verwenden und hier ein Optional als Binding Parameter anzugeben geht nicht. Auch mit forced Unwrapped nicht.
Ich habe das jetzt erstmal so gelöst, dass ich den der DetailView eine @State Variable vom Optional erstelle. Das ganz funktioniert und die Views werden aktualisiert sowie SwiftData speichert die Daten auch, aber es fühlt sich irgendwie nicht richtig an. Und bei er Ausführung meckert Xcode auch per Warnung:
Accessing State's value outside of being installed on a View. This will result in a constant Binding of the initial value and will not update.
Ich denke man kann das irgendwie eleganter machen.
Hier mein auf das Wesentliche gekürzter Code:
Quellcode
- import SwiftUI
- import SwiftData
- struct View_Immos: View {
- @Environment(\.modelContext) private var context
- @Query private var immos: [Immobilie]
- @State private var columnVisibility = NavigationSplitViewVisibility.doubleColumn
- @State private var suchfeld = ""
- @State private var aktImmo : Immobilie?
- var body: some View {
- NavigationSplitView(columnVisibility: $columnVisibility) {
- VStack{
- Text("Immobilien")
- .padding(.bottom, 30)
- HStack {
- Spacer()
- Text("Suche:")
- .padding(.leading)
- TextField("Suchkriterien", text: $suchfeld)
- .padding(.trailing)
- .textFieldStyle(RoundedBorderTextFieldStyle())
- .disableAutocorrection(true)
- Spacer()
- }
- List(immos, selection: $aktImmo) {immo in
- NavigationLink(immo.name, value: immo)
- }
- .font(.title3)
- .padding(.top, 0)
- }
- } detail: {
- // Ich denke das nächste ist nicht ganz OK
- @State var te: Immobilie = aktImmo ?? Immobilie(name: "", strasseHausNr: "")
- VStack {
- HStack {
- Text("Name der Immobilie:")
- TextField(text: $te.name) {
- Text(name)
- }.textFieldStyle(.roundedBorder)
- }
- }
- }
Das Problem ist halt, dass folgendes nicht geht, weil aktImmo ein Optional ist.
Für Hinweise ich die richtige Richtung wäre ich sehr dankbar.
Viele Grüße Micky