我正在我的内部进行 CoreData 获取init()
视图的方法。我没有在 SwiftUI 中使用 FetchRequest,因为我需要一个基于发送到视图的参数的谓词。在 @FetchRequest 中使用该参数将导致错误,因为该变量尚未初始化。
我正在 init() 内执行以下 fetch 请求
//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
loop.
ForEach(self.articleRows, id:\.self) { article in
但是,当我从上下文中删除实体时,我需要刷新视图以显示更改。在删除操作时,我切换@State
变量,以刷新视图。这有效,但是该实体仍在我的数组内。那是因为init()
不会再次调用,也不会再次发出获取请求。如果init()
将被调用,删除的实体将不再存在。
这里最好的方法是什么?如何获取我的核心数据实体。
我当前的解决方案:我目前正在使用Binding
在我的 Fetch 视图中。如果我进行更改,我会切换该绑定,并且我的父视图会重新加载。这将导致我的子视图(获取视图)也重新加载,并再次发出获取请求。这是最好的方法吗?有更简单的解决方案吗?
所以,我找到了解决我的问题的方法。
问题出在哪里?
视图没有更新,因为我没有使用 FetchRequest 属性包装器,因为我需要该 FetchRequest 中的实例变量。所以我需要在我的内部进行抓取Init()
方法。但我所做的是,我只是在一次中取出了我的物品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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)