如何解决在应用重启之前,SwiftUI @FetchRequest不会更新视图
我在Todo应用程序中有2个视图,一个视图允许用户添加新的Todos并将其标记为已完成,另一个视图显示日历,该日历使用户可以查看他们在任何给定日期可能已完成的所有Todos。 Todo
实体和DayOfYear
实体之间存在多对一关系。当用户点击“待办事项完成”按钮时,我将更新Core Data中“待办事项”下的completedDay_
关系。当我立即切换到日历视图时,FetchRequest
不包含任何内容,即使我在更新关系后立即保存了更新的上下文。但是,当我重新启动应用程序时,日历视图会正确显示完成的待办事项。
do {
let today = DayOfYear.withDate(convertStringToDate(day),context: context)
todo.completedDay_ = today
try self.context.save()
} catch {
print("Error saving managed object context: \(error)")
}
Extension DayOfYear
extension DayOfYear {
static func withDate(_ day: Date,context: NSManagedobjectContext) -> DayOfYear {
let request = fetchRequest(nspredicate(format: "date = %@",day as CVararg))
let days = (try? context.fetch(request)) ?? []
if let day = days.first {
return day
} else {
let newDay = DayOfYear(context: context)
newDay.date = day
return newDay
}
}
}
在日历视图中获取请求
@FetchRequest(entity: DayOfYear.entity(),sortDescriptors: [],predicate: nspredicate(format: "date >= %@ AND date <= %@",Date().startOfMonth() as CVararg,Date() as CVararg)) var daysOfYear: FetchedResults<DayOfYear>
对文本视图进行采样只是为了获得控制台打印结果
Text("Completed Todos").font(.title)
.onAppear {
print(self.daysOfYear)
// prints empty until I restart the app
}
FetchRequest
不应该在核心数据发生更改时自行更新并显示更新后的结果,还是在以某种方式更新关系时不立即更新?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。