mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
33 lines
1.1 KiB
Swift
33 lines
1.1 KiB
Swift
// The MIT License (MIT)
|
||
//
|
||
// Copyright (c) 2020–2022 Alexander Grebenyuk (github.com/kean).
|
||
|
||
import CoreData
|
||
|
||
final class ManagedObjectsObserver<T: NSManagedObject>: NSObject, ObservableObject, NSFetchedResultsControllerDelegate {
|
||
private let controller: NSFetchedResultsController<T>
|
||
@Published private(set) var objects: [T] = []
|
||
|
||
init(context: NSManagedObjectContext, sortDescriptior: NSSortDescriptor) {
|
||
let request = NSFetchRequest<T>(entityName: "\(T.self)")
|
||
request.fetchBatchSize = 100
|
||
request.sortDescriptors = [sortDescriptior]
|
||
|
||
self.controller = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
|
||
|
||
super.init()
|
||
|
||
self.controller.delegate = self
|
||
self.refresh()
|
||
}
|
||
|
||
private func refresh() {
|
||
try? controller.performFetch()
|
||
self.objects = controller.fetchedObjects ?? []
|
||
}
|
||
|
||
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
|
||
self.objects = self.controller.fetchedObjects ?? []
|
||
}
|
||
}
|