我有一个简单的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
中为NSPersistantContainer
和saveContext
完成了所有必要的设置。我已经设法在代码的其他领域使用了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
之间共享数据。
不久前,我为另一个问题制作了这个视频,展示了基本设置。FetchedResultsController
https://www.youtube.com/watch?v=-U-4Zon6dbE