From c07435e8668c321b0177d1261b26d3eea938da51 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Tue, 26 Jan 2016 12:22:30 +0900 Subject: [PATCH] Added utility for re-faulting all objects in a transaction/dataStack --- .../NSManagedObjectContext+Transaction.swift | 12 ++++++++++++ .../Saving and Processing/BaseDataTransaction.swift | 13 +++++++++++++ .../CoreStore+Transaction.swift | 8 ++++++++ .../DataStack+Transaction.swift | 13 +++++++++++++ 4 files changed, 46 insertions(+) diff --git a/CoreStore/Internal/NSManagedObjectContext+Transaction.swift b/CoreStore/Internal/NSManagedObjectContext+Transaction.swift index d9960cd..dea33d8 100644 --- a/CoreStore/Internal/NSManagedObjectContext+Transaction.swift +++ b/CoreStore/Internal/NSManagedObjectContext+Transaction.swift @@ -167,6 +167,18 @@ internal extension NSManagedObjectContext { } } + internal func refreshAllObjectsAsFaults() { + + if #available(iOS 8.3, *) { + + self.refreshAllObjects() + } + else { + + self.registeredObjects.forEach { self.refreshObject($0, mergeChanges: false) } + } + } + // MARK: Private diff --git a/CoreStore/Saving and Processing/BaseDataTransaction.swift b/CoreStore/Saving and Processing/BaseDataTransaction.swift index e43c09c..e8e59dd 100644 --- a/CoreStore/Saving and Processing/BaseDataTransaction.swift +++ b/CoreStore/Saving and Processing/BaseDataTransaction.swift @@ -188,6 +188,19 @@ public /*abstract*/ class BaseDataTransaction { objects.forEach { context.fetchExisting($0)?.deleteFromContext() } } + /** + Refreshes all registered objects `NSManagedObject`s in the transaction. + */ + public func refreshAllObjectsAsFaults() { + + CoreStore.assert( + self.isRunningInAllowedQueue(), + "Attempted to refresh entities outside their designated queue." + ) + + self.context.refreshAllObjectsAsFaults() + } + // MARK: Internal diff --git a/CoreStore/Saving and Processing/CoreStore+Transaction.swift b/CoreStore/Saving and Processing/CoreStore+Transaction.swift index fb1941f..f6e6209 100644 --- a/CoreStore/Saving and Processing/CoreStore+Transaction.swift +++ b/CoreStore/Saving and Processing/CoreStore+Transaction.swift @@ -65,6 +65,14 @@ public extension CoreStore { return self.defaultStack.beginUnsafe(supportsUndo: supportsUndo) } + /** + Refreshes all registered objects `NSManagedObject`s in the `DataStack`. + */ + public static func refreshAllObjectsAsFaults() { + + self.defaultStack.refreshAllObjectsAsFaults() + } + @available(*, deprecated=1.3.1, renamed="beginUnsafe") @warn_unused_result public static func beginDetached() -> UnsafeDataTransaction { diff --git a/CoreStore/Saving and Processing/DataStack+Transaction.swift b/CoreStore/Saving and Processing/DataStack+Transaction.swift index 53a345f..28abca4 100644 --- a/CoreStore/Saving and Processing/DataStack+Transaction.swift +++ b/CoreStore/Saving and Processing/DataStack+Transaction.swift @@ -82,6 +82,19 @@ public extension DataStack { ) } + /** + Refreshes all registered objects `NSManagedObject`s in the `DataStack`. + */ + public func refreshAllObjectsAsFaults() { + + CoreStore.assert( + NSThread.isMainThread(), + "Attempted to refresh entities outside their designated queue." + ) + + self.mainContext.refreshAllObjectsAsFaults() + } + @available(*, deprecated=1.3.1, renamed="beginUnsafe") @warn_unused_result public func beginDetached() -> UnsafeDataTransaction {