From a34d2795afa025bbe179cc07f0f2f7adfc9e0ff8 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sun, 26 Jul 2015 09:27:00 +0900 Subject: [PATCH] remove queue asserts for detached transactions --- CoreStore.xcodeproj/project.pbxproj | 4 ++-- .../Internal/NSManagedObjectContext+Setup.swift | 1 - .../NSManagedObjectContext+Transaction.swift | 9 +-------- .../BaseDataTransaction.swift | 17 +++++++++++------ .../DetachedDataTransaction.swift | 13 ++++++++----- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 3c6b808..223578f 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -332,11 +332,11 @@ B56007101B3F6BD500A9A8F9 /* Into.swift */, B5E84EEB1AFF846E0064E85B /* BaseDataTransaction.swift */, B5E84EEA1AFF846E0064E85B /* AsynchronousDataTransaction.swift */, - B5E84EEC1AFF846E0064E85B /* DataStack+Transaction.swift */, + B5E84EF31AFF846E0064E85B /* SynchronousDataTransaction.swift */, B5E84EED1AFF846E0064E85B /* DetachedDataTransaction.swift */, + B5E84EEC1AFF846E0064E85B /* DataStack+Transaction.swift */, B5E84EEE1AFF846E0064E85B /* CoreStore+Transaction.swift */, B5E84EF21AFF846E0064E85B /* SaveResult.swift */, - B5E84EF31AFF846E0064E85B /* SynchronousDataTransaction.swift */, ); path = "Saving and Processing"; sourceTree = ""; diff --git a/CoreStore/Internal/NSManagedObjectContext+Setup.swift b/CoreStore/Internal/NSManagedObjectContext+Setup.swift index 875285b..9db9f20 100644 --- a/CoreStore/Internal/NSManagedObjectContext+Setup.swift +++ b/CoreStore/Internal/NSManagedObjectContext+Setup.swift @@ -75,7 +75,6 @@ internal extension NSManagedObjectContext { let context = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) context.parentContext = rootContext context.mergePolicy = NSRollbackMergePolicy - context.shouldCascadeSavesToParent = false context.undoManager = nil context.setupForCoreStoreWithContextName("com.corestore.maincontext") context.observerForDidSaveNotification = NotificationObserver( diff --git a/CoreStore/Internal/NSManagedObjectContext+Transaction.swift b/CoreStore/Internal/NSManagedObjectContext+Transaction.swift index 28777dd..a1636c7 100644 --- a/CoreStore/Internal/NSManagedObjectContext+Transaction.swift +++ b/CoreStore/Internal/NSManagedObjectContext+Transaction.swift @@ -150,14 +150,7 @@ internal extension NSManagedObjectContext { if let parentContext = self.parentContext where self.shouldCascadeSavesToParent { - let result = parentContext.saveSynchronously() - if let completion = completion { - - GCDQueue.Main.async { - - completion(result: result) - } - } + parentContext.saveAsynchronouslyWithCompletion(completion) } else if let completion = completion { diff --git a/CoreStore/Saving and Processing/BaseDataTransaction.swift b/CoreStore/Saving and Processing/BaseDataTransaction.swift index de38ab0..c2494b2 100644 --- a/CoreStore/Saving and Processing/BaseDataTransaction.swift +++ b/CoreStore/Saving and Processing/BaseDataTransaction.swift @@ -54,7 +54,7 @@ public /*abstract*/ class BaseDataTransaction { public func create(into: Into) -> T { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to create an entity of type \(typeName(T)) outside its designated queue." ) @@ -107,7 +107,7 @@ public /*abstract*/ class BaseDataTransaction { public func edit(object: T?) -> T? { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to update an entity of type \(typeName(object)) outside its designated queue." ) @@ -124,7 +124,7 @@ public /*abstract*/ class BaseDataTransaction { public func edit(into: Into, _ objectID: NSManagedObjectID) -> T? { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to update an entity of type \(typeName(T)) outside its designated queue." ) CoreStore.assert( @@ -144,7 +144,7 @@ public /*abstract*/ class BaseDataTransaction { public func delete(object: NSManagedObject?) { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete an entity outside its designated queue." ) @@ -171,7 +171,7 @@ public /*abstract*/ class BaseDataTransaction { public func delete(objects: [NSManagedObject?]) { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete entities outside their designated queue." ) @@ -190,7 +190,7 @@ public /*abstract*/ class BaseDataTransaction { public func rollback() { CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), + self.bypassesQueueing || self.transactionQueue.isCurrentExecutionContext(), "Attempted to rollback a \(typeName(self)) outside its designated queue." ) @@ -220,4 +220,9 @@ public /*abstract*/ class BaseDataTransaction { context.parentTransaction = self } + + internal var bypassesQueueing: Bool { + + return false + } } diff --git a/CoreStore/Saving and Processing/DetachedDataTransaction.swift b/CoreStore/Saving and Processing/DetachedDataTransaction.swift index db2851e..63ac19c 100644 --- a/CoreStore/Saving and Processing/DetachedDataTransaction.swift +++ b/CoreStore/Saving and Processing/DetachedDataTransaction.swift @@ -43,16 +43,19 @@ public final class DetachedDataTransaction: BaseDataTransaction { */ public func commit(completion: (result: SaveResult) -> Void) { - CoreStore.assert( - self.transactionQueue.isCurrentExecutionContext(), - "Attempted to commit a \(typeName(self)) outside its designated queue." - ) - self.context.saveAsynchronouslyWithCompletion { (result) -> Void in self.result = result completion(result: result) } } + + + // MARK: Internal + + internal override var bypassesQueueing: Bool { + + return true + } }