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

时间:2020-08-14 22:46:18

标签: ios swift xcode swiftui

我在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不应该在核心数据发生更改时自行更新并显示更新后的结果,还是在以某种方式更新关系时不立即更新?

0 个答案:

没有答案