From 8d86425875ff4d50e3fcba8fc79d87fea64f2879 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 7 Oct 2017 00:56:19 +0900 Subject: [PATCH] always create subclass type from cs_rawObject --- Sources/DynamicObject.swift | 7 ++++++- Sources/NSEntityDescription+DynamicModel.swift | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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? {