SwiftUI @FetchedResults 一对多关系没有正确更新
Posted
技术标签:
【中文标题】SwiftUI @FetchedResults 一对多关系没有正确更新【英文标题】:SwfitUI @FetchedResults one-many relationship didn't update properly 【发布时间】:2020-11-10 08:14:02 【问题描述】:我正在使用带有 Coredata 的 SwiftUI 来显示一对多的关系数据元素。
例子:
一个Group
有多个Book
。
我有两个视图,GroupView
有很多 GroupRowView
s。
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
中显示。
forEach
中的group
是FetchedResults<ContractGroup>.Element
,是不是和GroupRowView
中的var group: ContractGroup
不一样的原因?
如何使GroupRowView
中的group.books
得到更改?
谢谢!
【问题讨论】:
【参考方案1】:你需要在行中明确观察group
,比如
struct GroupRowView: View
@ObservedObject var group: Group
// ... other code
【讨论】:
以上是关于SwiftUI @FetchedResults 一对多关系没有正确更新的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中从 FetchedResults (CoreData) 中获取 NSOrderedSet
SwiftUI 核心数据错误 - “无法将 'FetchedResults<GCItem>' 类型的值转换为预期的参数类型 'Range<Int>'”
使用 NSFetchRequest 和 NSPredicate 时,SwiftUI 列表更新缓慢
如何在 SwiftUI 中限制 FetchRequest 中的结果数