Here is a simple setup that demonstrates my issue. Problem is the prev attribute is not correct. I believe it is because when I change previousNode, this modifies the existing Node objects.
import SwiftUI
import SwiftData
@Model
class Node {
var name: String
var prev: Node?
init(name:String, prev: Node?) {
self.name = name
self.prev = prev
}
}
struct ContentView: View {
@Environment(\.modelContext) var modelContext
@Query var nodes: [Node]
// Keep track of the last made node to set as previous when creating new node...
@State var previousNode: Node? = nil
var body: some View {
VStack {
Button("Add node") {
print("Adding node", nodes)
let node = Node(name: "Node \(nodes.count)", prev: previousNode)
modelContext.insert(node)
do {
try modelContext.save()
previousNode = node
} catch {
fatalError("Failed saving model context: \(error)")
}
}
List(nodes) { node in
HStack {
Text(node.name + " has previous node:")
Text(node.prev?.name ?? "nil")
}
}
}
.padding()
}
}
#Preview {
ContentView()
.modelContainer(for: Node.self, inMemory: true)
}