Skip to content

Commit 9539092

Browse files
committed
Add ManagedObjectViewContext
1 parent ac6ebfe commit 9539092

1 file changed

Lines changed: 37 additions & 1 deletion

File tree

Sources/CoreDataModel/NSManagedObjectContext.swift

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77

88
#if canImport(CoreData)
99
import Foundation
10+
import Combine
1011
import CoreData
1112
import CoreModel
1213

13-
extension NSManagedObjectContext: ModelStorage, ViewContext {
14+
extension NSManagedObjectContext: ModelStorage {
1415

1516
public func fetch(_ entity: EntityName, for id: ObjectID) throws -> ModelData? {
1617
try self.find(entity, for: id)
@@ -58,6 +59,41 @@ extension NSManagedObjectContext: ModelStorage, ViewContext {
5859
}
5960
}
6061

62+
@MainActor
63+
public final class ManagedObjectViewContext: ViewContext, ObservableObject {
64+
65+
internal let context: NSManagedObjectContext
66+
67+
public init(context: NSManagedObjectContext) {
68+
self.context = context
69+
assert(context.concurrencyType == .mainQueueConcurrencyType)
70+
}
71+
72+
public init(persistentContainer: NSPersistentContainer) {
73+
self.context = persistentContainer.viewContext
74+
}
75+
76+
/// Fetch managed object.
77+
public func fetch(_ entity: EntityName, for id: ObjectID) throws -> ModelData? {
78+
try context.fetch(entity, for: id)
79+
}
80+
81+
/// Fetch managed objects.
82+
public func fetch(_ fetchRequest: FetchRequest) throws -> [ModelData] {
83+
try context.fetch(fetchRequest)
84+
}
85+
86+
/// Fetch managed objects IDs.
87+
public func fetchID(_ fetchRequest: FetchRequest) throws -> [ObjectID] {
88+
try context.fetchID(fetchRequest)
89+
}
90+
91+
/// Fetch and return result count.
92+
public func count(_ fetchRequest: FetchRequest) throws -> UInt {
93+
try context.count(fetchRequest)
94+
}
95+
}
96+
6197
internal extension NSManagedObjectContext {
6298

6399
func fetchObjects(_ fetchRequest: FetchRequest) throws -> [NSManagedObject] {

0 commit comments

Comments
 (0)