gpt4 book ai didi

core-data - SwiftUI - 如何在 init 中使用 fetchRequest 更新数据

转载 作者:行者123 更新时间:2023-12-04 14:32:47 34 4
gpt4 key购买 nike

我正在我的 init() 中执行 CoreData 获取 View 的方法。我没有在 SwiftUI 中使用 FetchRequest,因为我需要一个基于参数的谓词,该参数也发送到 View 。在@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
但是,当我从上下文中删除实体时,我需要刷新 View 以显示更改。在删除操作时,我切换 @State变量,刷新 View 。这有效,但是实体仍在我的数组中。那是因为 init()不会再次调用并且不会再次发出获取请求。如 init()将被调用,被删除的实体将不再存在。
这里最好的方法是什么?如何重新获取我的 CoreData 实体。
我目前的解决方案:我目前正在使用 Binding在我的 Fetch View 中。如果我进行更改,我会切换该绑定(bind)并重新加载我的父 View 。这将导致我的 subview (获取 View )也重新加载并再次发出获取请求。这是最好的方法吗?任何更简单的解决方案?

最佳答案

所以,我找到了解决我的问题的方法。
出了什么问题?
View 没有更新,因为我没有使用 FetchRequest 属性包装器,因为我需要在该 FetchRequest 中有一个实例变量。所以我需要在我的 Init() 里面做 Fetching方法。但我所做的是,我只是在 init() 中取了一次我的元素。除非重新加载父级,否则不会更新。
如何在不烦人的父更新的情况下解决它?
而不是在 init() 中只进行一次手动获取我使用了 FetchRequest 并在 init() 中对其进行了初始化,因此它仍然表现为 FetchRequest 属性包装器,就像一个 Observable 对象。
我是这样声明的:

@FetchRequest var articleRows : FetchedResults<Article>
而在 init() 里面
//Here in my predicate I use self.type variable 
var predicate = NSPredicate(format: "type == %d", self.type)

//Intialize the FetchRequest property wrapper
self._articleRows = FetchRequest(entity: Article.entity(), sortDescriptors: [], predicate: predicate)

关于core-data - SwiftUI - 如何在 init 中使用 fetchRequest 更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62636252/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com