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