如何从ViewController swift中获取CoreData属性



我有一个简单的CoreData堆栈,其中有一个CoreData类Booking,我想在ViewController中使用它。我想获得Booking的每个记录,并使用每个记录的data属性将事件放入日历视图控制器中。

我发现了这段应该获取CoreData实体的代码,它似乎还可以——我只是不知道如何在这一点之外使用这些数据,例如,在一个循环中获取Booking.date属性并打印它。

我的ViewController课堂上有这个:

@Environment(.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: Booking.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: Booking.id, ascending: false)
]
) var bookings: FetchedResults<Booking>

这没有错误,但我不能确定这是否真的是从Booking实体获取数据,因为我不知道如何使用返回的数据。

我尝试在override func loadView()方法中仅使用print(bookings)。当它是打印声明时,它崩溃了,似乎是因为它是nil,没有打开——但当我试图打开它时,什么都不起作用。

我想我从CoreData获取Bookings的方式一定有问题,但我不知道是什么错了。有没有一种特定的方法可以从ViewController访问这些数据

注意,我已经在AppDelegate中为NSPersistantContainersaveContext完成了所有必要的设置。我已经设法在代码的其他领域使用了CoreData,所以我知道它的这一方面工作正常。这个ViewController让我很困惑

FetchedResultsController放在用作Manager/ViewModel的ObservableObject中会有所帮助。

https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller

@Published var bookings将通过NSFetchedResultsControllerDelegate的方法controllerDidChangeContent(_:)进行更新

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html

通过单例模式或其他模式使用ObservableObject的共享实例将使您能够在ViewController和SwiftUIView之间共享数据。

不久前,我为另一个问题制作了这个视频,展示了基本设置。FetchedResultsControllerhttps://www.youtube.com/watch?v=-U-4Zon6dbE

最新更新