From 8d86425875ff4d50e3fcba8fc79d87fea64f2879 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 7 Oct 2017 00:56:19 +0900 Subject: [PATCH 1/2] 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? { From 7ff29d60864a4ff0f03589ecccb9e68d8aa932ae Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sat, 7 Oct 2017 00:57:41 +0900 Subject: [PATCH 2/2] version bump --- CoreStore.podspec | 2 +- Sources/Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CoreStore.podspec b/CoreStore.podspec index 4f76e67..fef69a2 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "4.1.2" + s.version = "4.1.3" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/Sources/Info.plist b/Sources/Info.plist index 438715f..a19ea3e 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.1.2 + 4.1.3 CFBundleSignature ???? CFBundleVersion