Ошибка отношений 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")
        }
    }
}

при запуске я не хочу, чтобы вещи загружались в память. Я хочу, чтобы они загружались, когда они используются.

0 ответов

Другие вопросы по тегам