Ошибка отношений SwiftData не возникает при получении модели
Это может быть, а может и не быть ошибкой или моей неправильной реализацией. Когда два объекта связаны друг с другом, один из них обычно неисправен до тех пор, пока не будет использован для сохранения места в памяти. Это поведение по умолчанию в CoreData.
Тем не менее, я пачкаю руки SwiftData и вижу, что никаких ошибок во взаимоотношениях не происходит. Все данные извлекаются, и памяти будет трудно их обработать, и мне было интересно, неверна ли моя реализация.
У меня есть две модели: Личность и Владение.
Модель Личности имеет отношение один ко многим к модели Владения.
это означает, что каждое имущество может принадлежать только одному человеку, но у человека может быть несколько вещей.
Я установил свою модель следующим образом
@Model
class Person {
@Attribute(.unique)
let personID: String
@Relationship(.cascade, inverse: \Possession.person)
var possetions: [Possession]?
init(id: String, possessions: [Possession]) {
self.personID = id
self.possetions = possessions
}
}
владение:
@Model
class Possession {
@Attribute(.unique)
let id: String
let name: String?
var person: Person?
init(id: String, name: String, person: Person) {
self.id = id
self.name = name
self.person = person
}
}
Если я установлю точку останова, я увижу, что все владения загружены в память, и я не хочу, чтобы это происходило.
Однако в Core Data мы получаем ошибку взаимоотношений, в SwiftData я не наблюдаю такого же поведения.
вот как реализуется мой взгляд
struct ContentView: View {
@Environment(\.modelContext) private var modelContext
@EnvironmentObject private var navigationStore: NavigationStore
@Query() private var people: [Person]
var body: some View {
List {
ForEach(people) { person in
NavigationLink(value: person) {
VStack {
Text(person.personID)
}
}
.swipeActions {
Button("Delete") {
modelContext.delete(person)
}
}
}
}
.toolbar(content: {
Button("Add") {
let newPErson = Person(id: UUID().uuidString, possessions: [])
modelContext.insert(newPErson)
do {
try modelContext.save()
} catch {
assertionFailure("\(error)")
}
}
})
.navigationDestination(for: Person.self) { person in
Text("hello")
}
}
}
при запуске я не хочу, чтобы вещи загружались в память. Я хочу, чтобы они загружались, когда они используются.