【发布时间】:2021-10-03 11:33:50
【问题描述】:
我有一个将 Person 和 MoneyEntries 实体存储在 Core Data DB 中的应用。
Person 与 MoneyEntry 有 1:many 关系。我在 Person 的扩展中创建了一个计算 var,它计算与此人相关的所有 MoneyEntry 条目的总和:
extension Person {
var sumOfEntries: Double {
var sum = 0.0
entries.forEach({sum += $0.value})
return sum
}
}
在第一个视图中,我列出了所有 Person 对象及其对应的 MoneyEntries 的总和:
struct PeopleListView: View {
@Environment(\.managedObjectContext) var viewContext
@FetchRequest var people: FetchedResults<Person>
init() {
let request = NSFetchRequest<Person>(entityName: "Person")
request.sortDescriptors = [NSSortDescriptor(key: "lastName_", ascending: true)]
let predicate = NSPredicate(format: "TRUEPREDICATE")
request.predicate = predicate
_people = FetchRequest(fetchRequest: request)
}
var body: some View{
ForEach(people, id: \.self) { person in
Text("\(String(person.sumOfEntries) €")
}
}
}
在第二个视图中,我添加了一个 MoneyEntry 对象:
let entryObj = MoneyEntry(context: viewContext)
entryObj.person = person
entryObj.value = valueAsDouble
person.objectWillChange.send()
try? viewContext.save()
但在我的第一个视图中,sumOfEntries 没有更新。我该怎么做才能解决这个问题?
【问题讨论】:
-
计算属性不订阅任何内容,是否查看了核心数据派生属性?
-
@JoakimDanielson 我该怎么做?
标签: ios swift core-data swiftui