Ich bin neu bei Xcode und habe einen Fehler gemacht, bei dem ich nicht weiß, wie ich ihn beheben soll.
Das war mein Code zuerst:
#Preview {
AddLektionView().modelContainer(for: Lektion.self)
}
und dann habe ich bemerkt, dass er so aussehen sollte:
#Preview {
AddLektionView().modelContainer(for: Lektion.self, inMemory: true)
}
Nun stehe ich vor dem Problem, dass die Preview die Daten auf Dauer gespeichert hat und ich beim ändern vom Aufbau der Daten, die gespeichert werden sollen, einen Fehler erhalte, da die neue App eine veraltete Datenstruktur von SwiftData lädt, was der App nicht passt. Daraufhin erhalte ich dann einen Fehler, dass die Daten wegen der unbekannten neuen Variable nicht geladen werden können.
Wie kann ich die, von SwiftData geladenen Daten entfernen, sodass die Preview (Canvas) wieder funktioniert? (Eine Neuinstallation von Xcode habe ich schon probiert)
Ich danke für jede Hilfe!
Mit freundlichen Grüßen
Tobias
Post
Replies
Boosts
Views
Activity
I want to use a Toggle() but when I give it an isOn Variable it says:
Cannot convert value of type 'Bool' to expected argument type 'Binding'
When I then try to sign the variable with a $ it says:
Cannot find '$lektion' in scope
Here is my Code:
import SwiftUI
import SwiftData
struct LektionenView: View {
@Environment(\.modelContext) private var modelContext
@Query(sort: \Lektion.id) private var lektionen: [Lektion]
@State var isPresented: Bool = false
var body: some View {
List {
ForEach(lektionen) { lektion in
NavigationLink {
VokabelnView(lektion: lektion).navigationTitle("Vokabeln")
} label: {
Toggle("", isOn: $lektion.isOn)
}
}
.onDelete(perform: deleteItems)
}.sheet(isPresented: $isPresented, content: {
AddLektionView()
}).toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
ToolbarItem {
Button {
isPresented = true
} label: {
Label("Add Item", systemImage: "plus")
}
}
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
for index in offsets {
modelContext.delete(lektionen[index])
}
}
}
}
#Preview {
ContentView()
.modelContainer(for: Lektion.self, inMemory: true)
}
I know that you can't use a sheet inside of a ForEach view but my workaround outputs me most of the time the right index but sometimes just the first.
@State private var isEditPresented: Bool = false
@State private var cardIndex: Int = 0
var body: some View {
ForEach(lesson.cards.indices, id: \.self) { index in
Button {
cardIndex = index
print("edit: \(cardIndex)")
isEditPresented = true
} //:BUTTON
}.sheet(isPresented: $isEditPresented) {
EditCardView(cardIndex: cardIndex)
} //:FOREACH
} //:BODY
The print statement outputs:
edit: 1
My EditCardView:
@State var cardIndex: Int
var body: some View {
Form {
SomeViews()
}.onAppear() {
print("editView: \(cardIndex)")
} //:FORM
} //:BODY
The interesting thing is that the first print statement is edit: 1
but the print statement from my EditCardView returns editView: 0
Sometimes it works fine and prints:
edit: 1
editView: 1
How do I fix that?