【发布时间】:2020-06-29 10:34:37
【问题描述】:
我正在 View 的 init() 方法中进行 CoreData 提取。我没有在 SwiftUI 中使用 FetchRequest,因为我需要一个基于参数的谓词,该参数也发送到视图。在@FetchRequest 中使用该参数将导致错误,因为该变量尚未初始化。
我在 init() 中执行 fetch Request
//FetchRequest
let fetch : NSFetchRequest<Article>
self.articleRows = [Article]()
fetch = Article.fetchRequest() as! NSFetchRequest<Article>
fetch.predicate = NSPredicate(format: "type == %d", self.type)
do {
self.articleRows = try NSManagedObjectContext.current.fetch(fetch)
} catch
{
}
这工作正常。我在 ForEach 循环中显示我的所有数据。
ForEach(self.articleRows, id:\.self) { article in
但是,当我从上下文中删除实体时,我需要刷新视图以显示更改。在删除操作中,我切换 @State 变量以刷新视图。那行得通,但是实体仍在我的数组中。那是因为init() 没有被再次调用并且获取请求也没有再次发出。如果init() 被调用,被删除的实体将不再存在。
这里最好的方法是什么?如何重新获取我的 CoreData 实体。
我目前的解决方案:我目前在我的 Fetch 视图中使用 Binding。如果我进行更改,我会切换该绑定并重新加载我的父视图。这将导致我的子视图(获取视图)也重新加载,并再次发出获取请求。这是最好的方法吗?有没有更简单的解决方案?
【问题讨论】: