【发布时间】:2019-12-08 21:31:04
【问题描述】:
所以,我想要一个 Text,它会根据我的 CoreData 模型的内容更改其内容。为此,我在 Xcode beta 4 中使用了一个计算属性,但它似乎不再起作用了。要么这是一个错误,要么还有其他我看不到的问题?
我真正遇到的问题是,当在我的商店中调用 self.objectWillChange.send() 时,我的视图(和计算的属性)似乎没有得到更新。
我还尝试将我的 var '导出'到商店并从那里获取它,结果相同...
编辑:
我只是对另一个类进行了相同的尝试,但它不适用于 objectWillChange.send() 但仅适用于 @Published 但是,如果从 NSObject 继承的类甚至停止工作...
我刚刚发现:用
struct Today: View {
@EnvironmentObject var myStore: DateStore
var hasPlans: Bool {
guard let plans = myStore.getPlans() else { return false }
return plans.isEmpty
}
var body: some View{
VStack{
Text(hasPlans ? "I have plans":"I have time today")
Button(action: {
self.myStore.addPlans(for: Date())
}) {
Text("I have plans")
}
}
}
class DateStore: NSObject, ObservableObject, NSFetchedResultsControllerDelegate {
private var fetchedResultsController: NSFetchedResultsController<DateStore>
//...
public func addPlans(for date: Date){
//{...}
if let day = self.dates.first(where: { $0.date == date}){
day.plans += 1
saveChanges()
}else{
self.create(date: dayDate)
}
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.objectWillChange.send()
}
}
这是我的问题的一个非常简化的版本,我知道我的 DataModel 可以工作,因为值发生了变化并且调用了 self.objectWillChange.send(),但我的视图由于某种原因没有更新......
【问题讨论】:
-
您是否考虑了 Beta 5 的更改? sarunw.com/posts/swiftui-changes-in-xcode-11-beta-5
-
是的,我删除了所有不推荐使用的方法并将所有内容更改为 ObservableObjects,正如您在我的代码中看到的那样。但我没有发现任何关于计算属性的变化或视图如何更新的任何信息。 ..
-
确认我遇到了同样的问题。
-
我没有看到你对
objectWillChange的实现。 -
当我有一个符合@ObservableObject 的类的子类时,我看到了类似的问题。 see here
标签: swift core-data swiftui computed-properties combine