SwfitUI @FetchedResults одно-многие отношения не обновлялись должным образом

#ios #swift #core-data #swiftui

#iOS #swift #основные данные #swiftui

Вопрос:

Я использую SwiftUI с Coredata для отображения элементов данных отношения «один ко многим».

Пример:

У одного Group их много Book .

У меня есть два представления, GroupView имеет много GroupRowView с.

 struct GroupView: View {

    var groups: FetchedResults<Group>

    var body: some View {
        ScrollView(.horizontal) {
            HStack(alignment: .center, spacing: 32, content: {

                ForEach(contractGroups) { group in
                    HStack {
                        GroupRowView(group: group)
                        Text(String(group.books?.count ?? 0)) // display correct
                                            .foregroundColor(Color.red)
                    }

                }

            })
        }
    }
}
  

и здесь находится GroupRowView:

 struct GroupRowView: View {

    var group: Group

    var body: some View {
        ZStack {

            Color(.white)
            VStack {
                Text(group.name!)
                    .foregroundColor(Color.white)
                    .font(.system(size: 17, weight: .bold, design: .default))

                Text(String(group.books?.count ?? 0)) //display wrong
                    .foregroundColor(Color.white)
            }
        }.frame(width: 120, height: 100, alignment: .center)
    }
}
  

Каждый раз, когда books обновлялось, количество книг отображалось правильно в GroupView , но не в GroupRowView .

group В forEach том FetchedResults<ContractGroup>.Element , что причина не такая, как var group: ContractGroup в GroupRowView ?

Как внести изменения group.books в GroupRowView получение изменений?

Спасибо!

Ответ №1:

Вам нужно явно наблюдать group в строке, например

 struct GroupRowView: View {

    @ObservedObject var group: Group

    // ... other code