[英]How to create a core data manager environment in SwiftUI
我对 SwiftUI 和核心数据相当陌生。 我了解了可观察对象,我可以将其用作环境 object 以仅加载我的数据一次并使其可用于每个视图。 在那里,我有一个符合ObservableObject
的 class 并且我可以发布我的局部变量/数据。
现在,我学习了 Core Data,我想知道如何做一些熟悉的事情。 当我创建我的实体和关系时,我得到了一些链接:
extension Foo {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Foo> {
return NSFetchRequest<Foo>(entityName: "Foo")
}
@NSManaged public var name: String
@NSManaged public var date: Date
@NSManaged public var bars: NSSet
public var barsArray: [Bar] {
let set = bars as? Set<Bar> ?? []
return Array(set)
}
}
我创建了barsArray
以与 arrays 一起使用。 在我看来,每次我需要一个核心数据实体时,我都会调用:
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Foo.date, ascending: false)]) var foos: FetchedResults<Foo>
我的问题是,如何创建一个 Cora 数据管理器 Class (?) 让我的数据像在可观察对象中一样可用。 还是有更好/更容易的东西?
给出更像现实世界的问题:我有一个带有类别的实体,在我的应用程序的人视图中,我调用 fetch 请求来访问类别。 但这是有道理的,只加载一次并将其传递给所需的视图,问题是:如何? 希望,这是有道理的。
最好的方法是在 MainView 中使用一次@FetchRequest
,然后将您的实体传递给您的子视图。
假设您的 ListView 中有您的 FetchRequest:
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Foo.date, ascending: false)]) var foos: FetchedResults<Foo>
然后在 List 中,遍历所有元素并将它们作为 ObservedObject 传递给您的 Subview。
List { ForEach(self.foos, id:.self) { DetailView 中的 foo(item: foo) }
在您的 DetailView 中,将 Foo 声明为 ObservedObject,它将从父视图传递。 由于它是ObservedObject
,它会自动检测更改并更新您的视图。
struct DetailView : View
{
@ObservedObject var foo : Foo
FetchRequest 是伟大的功能之一,它使 SwiftUI 和 CoreData 在我看来非常棒。 每当您创建新实体时,FetchRequest 都会立即更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.