微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在应用重启之前,SwiftUI @FetchRequest不会更新视图

如何解决在应用重启之前,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 举报,一经查实,本站将立刻删除。