SwfitUI @FetchedResults一对多关系未正确更新

时间:2020-11-10 08:14:02

标签: ios swift core-data 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中的forEachFetchedResults<ContractGroup>.Element,是不是与var group: ContractGroup中的GroupRowView不同的原因吗?

如何使group.books中的GroupRowView进行更改?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要明确观察group行,例如

struct GroupRowView: View {

    @ObservedObject var group: Group

    // ... other code