diff --git a/Sources/DynamicObject.swift b/Sources/DynamicObject.swift index c48bdba..6bdb2e7 100644 --- a/Sources/DynamicObject.swift +++ b/Sources/DynamicObject.swift @@ -131,7 +131,12 @@ extension CoreStoreObject { } return forceCast(coreStoreObject) } - let coreStoreObject = self.init(rawObject: object) + @inline(__always) + func forceTypeCast(_ type: DynamicObject.Type, to: T.Type) -> T.Type { + + return type as! T.Type + } + let coreStoreObject = forceTypeCast(object.entity.dynamicObjectType!, to: self).init(rawObject: object) object.coreStoreObject = coreStoreObject return coreStoreObject } diff --git a/Sources/NSEntityDescription+DynamicModel.swift b/Sources/NSEntityDescription+DynamicModel.swift index 52d2783..5913ffd 100644 --- a/Sources/NSEntityDescription+DynamicModel.swift +++ b/Sources/NSEntityDescription+DynamicModel.swift @@ -31,6 +31,17 @@ import Foundation internal extension NSEntityDescription { + @nonobjc + internal var dynamicObjectType: DynamicObject.Type? { + + guard let userInfo = self.userInfo, + let typeName = userInfo[UserInfoKey.CoreStoreManagedObjectTypeName] as! String? else { + + return nil + } + return (NSClassFromString(typeName) as! DynamicObject.Type) + } + @nonobjc internal var coreStoreEntity: DynamicEntity? {