From 5a104c545fe36606cea06585510bb9382c16d57a Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Wed, 16 Oct 2024 17:32:21 -0400 Subject: [PATCH] one more thing --- .../DataThespian/SwiftData/ModelContext.swift | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Sources/DataThespian/SwiftData/ModelContext.swift b/Sources/DataThespian/SwiftData/ModelContext.swift index ef77a06..251dfb3 100644 --- a/Sources/DataThespian/SwiftData/ModelContext.swift +++ b/Sources/DataThespian/SwiftData/ModelContext.swift @@ -34,8 +34,27 @@ extension ModelContext { public func get(_ model: Model) throws -> T? where T: PersistentModel { - try self.existingModel(for: model.persistentIdentifier) + try self.persistentModel(withID: model.persistentIdentifier) } + + private func persistentModel(withID objectID: PersistentIdentifier) throws -> T? + where T: PersistentModel { + if let registered: T = registeredModel(for: objectID) { + return registered + } + if let notRegistered: T = model(for: objectID) as? T { + return notRegistered + } + + let fetchDescriptor = FetchDescriptor( + predicate: #Predicate { $0.persistentModelID == objectID }, + fetchLimit: 1 + ) + + return try fetch(fetchDescriptor).first + } + + @available(*, deprecated) internal func existingModel(for objectID: PersistentIdentifier) throws -> T? where T: PersistentModel { if let registered: T = registeredModel(for: objectID) {