CoreDataStack
public final class CoreDataStack
extension CoreDataStack: Equatable
extension CoreDataStack: CustomStringConvertible
An instance of CoreDataStack encapsulates the entire Core Data stack.
It manages the managed object model, the persistent store coordinator, and managed object contexts.
It is composed of a main context and a background context. These two contexts operate on the main queue and a private background queue, respectively. Both are connected to the persistent store coordinator and data between them is perpetually kept in sync.
Changes to a child context are propagated to its parent context and eventually the persistent store when saving.
Warning
You cannot create aCoreDataStack instance directly. Instead, use a CoreDataStackProvider for initialization.
-
Describes the result type for creating a
CoreDataStack.Declaration
Swift
public typealias StackResult = Result<CoreDataStack, Error>
-
The model for the stack.
Declaration
Swift
public let model: CoreDataModel -
The main managed object context for the stack, which operates on the main queue. This context is a root level context that is connected to the
storeCoordinator. It is kept in sync withbackgroundContext.Declaration
Swift
public let mainContext: NSManagedObjectContext -
The background managed object context for the stack, which operates on a background queue. This context is a root level context that is connected to the
storeCoordinator. It is kept in sync withmainContext.Declaration
Swift
public let backgroundContext: NSManagedObjectContext -
The persistent store coordinator for the stack. Both contexts are connected to this coordinator.
Declaration
Swift
public let storeCoordinator: NSPersistentStoreCoordinator
-
Creates a new child context with the specified
concurrencyTypeandmergePolicyType.The parent context is either
mainContextorbackgroundContextdependending on the specifiedconcurrencyType:.PrivateQueueConcurrencyTypewill setbackgroundContextas the parent..MainQueueConcurrencyTypewill setmainContextas the parent.
Saving the returned context will propagate changes through the parent context and then to the persistent store.
Declaration
Swift
public func childContext(concurrencyType: NSManagedObjectContextConcurrencyType = .mainQueueConcurrencyType, mergePolicyType: NSMergePolicyType = .mergeByPropertyObjectTrumpMergePolicyType) -> NSManagedObjectContext.ChildContextParameters
concurrencyTypeThe concurrency pattern to use. The default is
.MainQueueConcurrencyType.mergePolicyTypeThe merge policy to use. The default is
.MergeByPropertyObjectTrumpMergePolicyType.Return Value
A new child managed object context.
-
Resets the managed object contexts in the stack on their respective threads. Then, if the coordinator is connected to a persistent store, the store will be deleted and recreated on a background thread. The completion closure is executed on the main thread.
Note
Removing and re-adding the persistent store is performed on a background queue. For binary and SQLite stores, this will also remove the store from disk.
Declaration
Swift
public func reset(onQueue queue: DispatchQueue = .global(qos: .userInitiated), completion: @escaping (StackResult) -> Void)Parameters
queueA background queue on which to reset the stack. The default is a background queue with a “user initiated” quality of service class.
completionThe closure to be called once resetting is complete. This is called on the main queue.
View on GitHub
CoreDataStack Class Reference