【发布时间】:2021-03-27 14:51:22
【问题描述】:
我有一个 Show CoreData NSManagedObject 和多个 Seasons。两种型号都可以标记为watched。当Show 的所有季节都标记为已观看时,Show 也应标记为已观看。我如何实现这一目标?我尝试为我的 NSManagedObject 类使用手动 getter 和 setter,但当状态发生变化时,我无法更新视图。
我的主视图代码:
// ShowDetailView.swift
@ObservedObject var show: Show
// ... in the body
Button(action: {
show.isWatched.toggle()
}, label: {
HStack {
Image(systemName: show.isWatched ? "checkmark.rectangle.fill" : "checkmark.rectangle")
}
})
ScrollView(.horizontal) {
LazyHStack {
ForEach(seasons) { season in
NavigationLink(destination: SeasonDetailView(season: season)) {
SeasonListItemView(season: season)
.environment(\.managedObjectContext, viewContext)
}
}
}
}
列表项的类:
// SeasonListItemView.swift
@ObservedObject var season: Season
Button(action: {
season.isWatched.toggle()
}, label: {
HStack {
Image(systemName: season.isWatched ? "checkmark.rectangle.fill" : "checkmark.rectangle")
}
})
我的意思是这完全有道理,因为Show 模型不知道应该在观看所有季节时将其标记为已观看,但是我如何实现并让它自动更新并同时使用CoreData?
// 编辑: 添加了我的最后一次编辑作为答案,因为没有找到其他解决方案。
【问题讨论】:
-
我希望有人能回答这个问题,因为我正在处理类似的问题。我认为设置观察者可能会奏效,但我从未设置过,所以我不确定。
-
@Ethan 也许我所做的编辑对您有所帮助。至少这对我来说解决了它,但它仍然感觉有点麻烦。