diff --git a/CoreStore/Importing Data/BaseDataTransaction+Importing.swift b/CoreStore/Importing Data/BaseDataTransaction+Importing.swift index 58d8be2..c8e7326 100644 --- a/CoreStore/Importing Data/BaseDataTransaction+Importing.swift +++ b/CoreStore/Importing Data/BaseDataTransaction+Importing.swift @@ -70,19 +70,17 @@ public extension BaseDataTransaction { "Attempted to import an object of type \(typeName(into.entityClass)) outside the transaction's designated queue." ) - var returnValue: T? - try autoreleasepool { + return try autoreleasepool { if !T.shouldImportFromSource(source) { - return + return nil } let object = self.create(into) try object.didInsertFromImportSource(source) - returnValue = object + return object } - return returnValue } func importUniqueObject( @@ -94,12 +92,11 @@ public extension BaseDataTransaction { "Attempted to import an object of type \(typeName(into.entityClass)) outside the transaction's designated queue." ) - var returnValue: T? - try autoreleasepool { + return try autoreleasepool { if !T.shouldImportFromSource(source) { - return + return nil } let uniqueIDKeyPath = T.uniqueIDKeyPath @@ -109,17 +106,16 @@ public extension BaseDataTransaction { if let object = self.fetchOne(From(T), Where(uniqueIDKeyPath, isEqualTo: uniqueIDValue)) { try object.updateFromImportSource(source) - returnValue = object + return object } else { let object = self.create(into) object.uniqueIDValue = uniqueIDValue try object.didInsertFromImportSource(source) - returnValue = object + return object } } - return returnValue } func importUniqueObjects( diff --git a/CoreStore/Internal/Functions.swift b/CoreStore/Internal/Functions.swift index c221e2e..6fbba1d 100644 --- a/CoreStore/Internal/Functions.swift +++ b/CoreStore/Internal/Functions.swift @@ -25,6 +25,40 @@ import Foundation +internal func autoreleasepool(@noescape closure: () -> T?) -> T? { + + var closureValue: T? + ObjectiveC.autoreleasepool { + + closureValue = closure() + } + + return closureValue +} + +internal func autoreleasepool(@noescape closure: () throws -> T?) throws -> T? { + + var closureValue: T? + var closureError: ErrorType? + ObjectiveC.autoreleasepool { + + do { + + closureValue = try closure() + } + catch { + + closureError = error + } + } + + if let closureError = closureError { + + throw closureError + } + return closureValue +} + internal func autoreleasepool(@noescape closure: () throws -> Void) throws { var closureError: ErrorType?